Administrator
2025-05-23 ea8e4abfb8c81cdae4d2a8743d81b615000f352d
feat(order): 添加自提点订单确认功能

- 新增 confirmLeaderOrder 方法用于确认自提点订单
- 在订单列表页面添加自提点选择和自提订单确认功能
- 修改订单导出功能,区分自提和快递订单
- 优化订单列表显示,增加操作按钮和备注字段
3 files modified
135 ■■■■ changed files
src/main/java/cc/mrbird/febs/mall/controller/order/AdminMallOrderController.java 40 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallTeamLeaderServiceImpl.java 2 ●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/modules/order/orderList.html 93 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/controller/order/AdminMallOrderController.java
@@ -399,6 +399,44 @@
        return new FebsResponse().success();
    }
    @GetMapping("confirmLeaderOrder")
    @ControllerEndpoint(operation = "确认货到达自提点", exceptionMessage = "操作失败")
    public FebsResponse confirmLeaderOrder(MallOrderInfo mallOrderInfoDto){
        String orderIds = mallOrderInfoDto.getOrderIds();
        List<String> ids = StrUtil.splitTrim(orderIds, ",");
        for(String id : ids){
            long orderId = Long.parseLong(id);
            MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectById(orderId);
            if(ObjectUtil.isEmpty(mallOrderInfo)){
//                continue;
                return new FebsResponse().fail().message("订单不存在");
            }
            Integer status = mallOrderInfo.getStatus() == null ? 0 : mallOrderInfo.getStatus();
            if(OrderStatusEnum.WAIT_SHIPPING.getValue() != status){
//                continue;
                return new FebsResponse().fail().message("订单不是待发货状态");
            }
            mallOrderInfo.setStatus(OrderStatusEnum.WAIT_FINISH.getValue());
            mallOrderInfoMapper.updateById(mallOrderInfo);
//            OrderStateDto orderStateDto = new OrderStateDto();
//            String productNames = getProductNames(mallOrderInfo.getMemberId(), mallOrderInfo.getId());
//            orderStateDto.setGoodsName(StrUtil.sub(productNames,0,15)+"...");
//            String takeUniqueCode = mallOrderInfo.getTakeUniqueCode();
//            MallTeamLeader mallTeamLeader = mallTeamLeaderMapper.selectLeaderByUniqueCode(takeUniqueCode);
//            orderStateDto.setAddressArea(mallTeamLeader.getAddressArea());
//            orderStateDto.setDetailAddress(StrUtil.sub(mallTeamLeader.getDetailAddress(),0,20)+"...");
//            orderStateDto.setRemark("果蔬等生鲜,请尽快取货");
//            orderStateDto.setLeaderPhone(mallTeamLeader.getPhone());
//            orderStateDto.setOpenId(mallMemberMapper.selectById(mallOrderInfo.getMemberId()).getOpenId());
//            DataDictionaryCustom dataDictionaryCustom = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.WX_TEMPLATE_ID_THREE.getType(), DataDictionaryEnum.WX_TEMPLATE_ID_THREE.getCode());
//            orderStateDto.setTemplateId(dataDictionaryCustom.getValue());
//            iXcxPayService.pushOrderToAddress(orderStateDto);
//            iXcxPayService.uniformMessageSend(orderStateDto);
        }
        return new FebsResponse().success();
    }
    @GetMapping("deliverOrder")
    @ControllerEndpoint(operation = "导出订单列表,系统自动发货", exceptionMessage = "操作失败")
    public FebsResponse deliverOrder(MallOrderInfo mallOrderInfoDto){
@@ -475,7 +513,7 @@
        orderSheet.setTitle(title);
//        String[] header = {"订单编号", "订单详情(商品*数量)", "订单金额", "用户提货码", "配送方式", "用户姓名", "用户电话","用户地址", "团长名称", "团长手机号码", "自提点名称"};
        String[] header = {"订单编号", "订单详情(商品*数量)", "订单金额", "用户提货码", "用户姓名", "用户电话","用户地址", "团长名称", "团长手机号码", "自提点名称"};
        String[] header = {"订单编号", "订单详情(商品*数量)", "订单金额", "用户提货码", "用户姓名", "用户电话","用户地址", "自提点名称", "自提点号码", "自提点名称"};
        orderSheet.setHeaders(header);
        QueryRequest request = new QueryRequest();
src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallTeamLeaderServiceImpl.java
@@ -138,7 +138,7 @@
            for(MallTeamLeader teamLeader : mallTeamLeaders){
                AdminSelectListLeaderVo adminSelectListLeaderVo = new AdminSelectListLeaderVo();
                adminSelectListLeaderVo.setUniqueCode(teamLeader.getUniqueCode());
                adminSelectListLeaderVo.setName(teamLeader.getName());
                adminSelectListLeaderVo.setName(teamLeader.getName() + "-" + teamLeader.getAddressArea());
                list.add(adminSelectListLeaderVo);
            }
        }
src/main/resources/templates/febs/views/modules/order/orderList.html
@@ -19,7 +19,7 @@
                                    </div>
                                </div>
                                <div class="layui-inline">
                                    <label class="layui-form-label layui-form-label-sm">状态:</label>
                                    <label class="layui-form-label">订单状态:</label>
                                    <div class="layui-input-inline">
                                        <select name="status">
                                            <option value="">请选择</option>
@@ -33,14 +33,14 @@
                                        </select>
                                    </div>
                                </div>
<!--                                <div class="layui-inline">-->
<!--                                    <label class="layui-form-label">团长:</label>-->
<!--                                    <div class="layui-input-inline">-->
<!--                                        <select name="uniqueCode" class="order-takeUniqueCode">-->
<!--                                            <option value="">请选择</option>-->
<!--                                        </select>-->
<!--                                    </div>-->
<!--                                </div>-->
                                <div class="layui-inline">
                                    <label class="layui-form-label">自提点:</label>
                                    <div class="layui-input-inline">
                                        <select name="uniqueCode" class="order-takeUniqueCode">
                                            <option value="">请选择</option>
                                        </select>
                                    </div>
                                </div>
<!--                                <div class="layui-inline">-->
<!--                                    <label class="layui-form-label layui-form-label-sm">配送方式</label>-->
<!--                                    <div class="layui-input-inline">-->
@@ -120,14 +120,14 @@
</script>
<script type="text/html" id="tableToolBarOrder">
    <div class="layui-btn-container">
<!--        <button class="layui-btn layui-btn-sm layui-btn-primary febs-button-blue-plain" lay-event="exportDeliverOne">导出待发货订单,系统自动发货</button>-->
<!--        <button class="layui-btn layui-btn-sm layui-btn-primary febs-button-blue-plain" lay-event="confirmOrder">确认到货</button>-->
        <button class="layui-btn layui-btn-sm layui-btn-primary febs-button-blue-plain" lay-event="exportDeliverOne">导出待发货订单(自提)</button>
        <button class="layui-btn layui-btn-sm layui-btn-primary febs-button-blue-plain" lay-event="confirmLeaderOrder">自提确认到货</button>
        <button class="layui-btn layui-btn-sm layui-btn-primary febs-button-blue-plain" lay-event="refundOrder">仅退款</button>
<!--        <button class="layui-btn layui-btn-sm layui-btn-primary febs-button-blue-plain" lay-event="refundOrderAndAmount">退款退货</button>-->
        <button class="layui-btn layui-btn-sm layui-btn-primary febs-button-blue-plain" lay-event="printSelect">自定义打印</button>
        <button class="layui-btn layui-btn-sm layui-btn-primary febs-button-blue-plain" lay-event="goodsStatistics">统计商品份数</button>
<!--        <button id="printSelect" type="button" class="layui-btn layui-btn-sm layui-btn-primary febs-button-blue-plain">自定义打印</button>-->
        <button class="layui-btn layui-btn-sm layui-btn-primary febs-button-blue-plain" lay-event="exportDeliverTwo">导出未发货订单(快递)</button>
        <button class="layui-btn layui-btn-sm layui-btn-primary febs-button-blue-plain" lay-event="exportDeliverTwo">导出待发货订单(快递)</button>
        <button class="layui-btn layui-btn-sm layui-btn-primary febs-button-blue-plain" id="importDeliver" lay-event="importDeliver">导入发货</button>
    </div>
</script>
@@ -170,7 +170,7 @@
        $.get(ctx + 'admin/leader/selectList', function (data) {
            for (var k in data)
            {
                $(".order-takeUniqueCode").append("<option value='" + data[k].uniqueCode + "'>" + data[k].name + "</option>");
                $(".order-takeUniqueCode").append("<option value='" + data[k].uniqueCode + "'>" + data[k].name+ "</option>");
            }
            layui.use('form', function () {
                var form = layui.form;
@@ -219,6 +219,34 @@
                //     febs.alert.success('操作成功');
                //     $query.click();
                // });
                // window.location.href = ctx + "admin/order/confirmOrder?takeUniqueCode="+uniqueCodeValue+"&orderIds="+ids;
            }
            if(event === 'confirmLeaderOrder'){
                let uniqueCodeValue = $searchForm.find("select[name='uniqueCode']").val();
                if(uniqueCodeValue == '' || uniqueCodeValue == null){
                    febs.alert.warn('请选择自提点');
                    return;
                }
                var data = checkStatus.data;
                let ids = "";
                for(let i = 0;i < data.length;i++){
                    if(data[i].status != 2){
                        febs.alert.warn('请选择待发货的订单');
                        return;
                    }else{
                        ids = ids + data[i].id+",";
                    }
                }
                // layer.alert(layui.util.escape(JSON.stringify(data)));
                console.log(ids);
                if(ids == null || ids == ""){
                    febs.alert.warn('请选择待发货的订单');
                    return;
                }
                febs.get(ctx + 'admin/order/confirmOrder?orderIds='+ids, null, function () {
                    febs.alert.success('操作成功');
                    $query.click();
                });
                // window.location.href = ctx + "admin/order/confirmOrder?takeUniqueCode="+uniqueCodeValue+"&orderIds="+ids;
            }
            if(event === 'confirmOrder'){
@@ -301,11 +329,11 @@
                });
            }
            if (event == 'exportDeliverOne') {
                // let uniqueCodeValue = $searchForm.find("select[name='uniqueCode']").val();
                // if(uniqueCodeValue == '' || uniqueCodeValue == null){
                //     febs.alert.warn('请选择团长');
                //     return;
                // }
                let uniqueCodeValue = $searchForm.find("select[name='uniqueCode']").val();
                if(uniqueCodeValue == '' || uniqueCodeValue == null){
                    febs.alert.warn('请选择自提点');
                    return;
                }
                var data = checkStatus.data;
                let ids = "";
                for(let i = 0;i < data.length;i++){
@@ -458,12 +486,25 @@
                toolbar: '#tableToolBarOrder',
                cols: [[
                        {type: 'checkbox', fixed: 'left'},
                        {type: 'numbers', title: '', width: 80},
                        {title: '操作',
                            templet: function (d) {
                                if(d.status === 2){
                                    return '<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="seeOrder" shiro:hasPermission="user:update">详情</button>'
                                        +'<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="deliverGoods" shiro:hasPermission="user:update">发货</button>'
                                }else if(d.status === 3){
                                    return '<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="seeOrder" shiro:hasPermission="user:update">详情</button>'
                                        +'<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="updateDeliver" shiro:hasPermission="user:update">修改物流信息</button>'
                                }else{
                                    return '<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="seeOrder" shiro:hasPermission="user:update">详情</button>'
                                }
                            },minWidth: 200,align:'center'},
                        {field: 'orderNo', title: '订单编号', minWidth: 200,align:'left' ,totalRowText:"合计"},
                        {field: 'memberName', title: '购买人', minWidth: 100,align:'left'},
                        {field: 'memberPhone', title: '联系方式', minWidth: 120,align:'left'},
                        {field: 'refererName', title: '推荐人', minWidth: 100,align:'left'},
                        {field: 'goodsName', title: '商品', minWidth: 160,align:'left'},
                        {field: 'remark', title: '备注', minWidth: 160,align:'left'},
                        {field: 'goodsAmount', title: '价格', minWidth: 80,align:'left', totalRow:true},
                        {field: 'carriage', title: '邮费', minWidth: 80,align:'left', totalRow:true},
                        {field: 'amount', title: '总金额', minWidth: 100,align:'left', totalRow:true},
@@ -502,20 +543,8 @@
                    //     }, minWidth: 80,align:'center'},
                        {field: 'payMethod', title: '支付方式', minWidth: 100,align:'left'},
                        {field: 'payTime', title: '支付时间', minWidth: 120,align:'left'},
                        {field: 'remark', title: '备注', minWidth: 160,align:'left'},
                        // {field: 'wxOrderNo', title: '支付订单号', minWidth: 120,align:'left'},
                        {title: '操作',
                            templet: function (d) {
                                if(d.status === 2){
                                    return '<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="seeOrder" shiro:hasPermission="user:update">详情</button>'
                                    +'<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="deliverGoods" shiro:hasPermission="user:update">发货</button>'
                                }else if(d.status === 3){
                                    return '<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="seeOrder" shiro:hasPermission="user:update">详情</button>'
                                    +'<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="updateDeliver" shiro:hasPermission="user:update">修改物流信息</button>'
                                }else{
                                    return '<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="seeOrder" shiro:hasPermission="user:update">详情</button>'
                                }
                            },minWidth: 200,align:'center', fixed:'right'}
                ]]
            });
        }