KKSU
2025-01-20 4eb7bd043cc1fe6bf0cdf44f8c045698c0e9e21b
refactor(mall): 确认收货功能

- 修改订单列表中的"修改物流信息"按钮为"确认收货"按钮- 移除与物流相关的信息输入和显示
- 更新订单状态为已发货
- 记录收货时间
6 files modified
145 ■■■■ changed files
src/main/java/cc/mrbird/febs/mall/controller/AdminMallOrderController.java 5 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/controller/ViewMallOrderController.java 19 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallOrderService.java 47 ●●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/modules/order/deliverGoods.html 28 ●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/modules/order/orderDetail.html 32 ●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/modules/order/orderList.html 14 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/controller/AdminMallOrderController.java
@@ -117,7 +117,7 @@
     * 订单列表-修改物流编号
     */
    @PostMapping("deliverGoodsUpdate")
    @ControllerEndpoint(operation = "订单列表-修改物流编号", exceptionMessage = "操作失败")
    @ControllerEndpoint(operation = "订单列表-确认收货", exceptionMessage = "操作失败")
    public FebsResponse deliverGoodsUpdate(@Valid DeliverGoodsDto deliverGoodsDto) {
        return adminMallOrderService.deliverGoodsUpdate(deliverGoodsDto);
    }
@@ -302,7 +302,8 @@
//        String[] header = {"订单编号", "订单金额", "下单时间", "配送方式", "收货姓名", "收货电话", "收货地址", "商品名称", "订单状态", "物流单号", "物流公司", "物流公司码"};
//        String[] header = {"订单编号", "订单金额", "下单时间", "配送方式", "收货姓名", "收货电话", "收货地址", "商品详情", "物流单号", "物流公司", "物流公司码"};
//        String[] header = {"订单编号", "收货姓名", "收货电话", "收货地址", "商品详情", "物流单号", "物流公司", "物流公司码"};
        String[] header = {"订单编号", "收货姓名", "收货电话", "收货地址", "商品详情", "备注", "物流单号", "物流公司", "物流公司码"};
//        String[] header = {"订单编号", "收货姓名", "收货电话", "收货地址", "商品详情", "备注", "物流单号", "物流公司", "物流公司码"};
        String[] header = {"订单编号", "收货姓名", "收货电话", "收货地址", "商品详情", "备注"};
        orderSheet.setHeaders(header);
        QueryRequest request = new QueryRequest();
src/main/java/cc/mrbird/febs/mall/controller/ViewMallOrderController.java
@@ -4,7 +4,6 @@
import cc.mrbird.febs.common.entity.FebsConstant;
import cc.mrbird.febs.common.utils.FebsUtil;
import cc.mrbird.febs.common.utils.RedisUtils;
import cc.mrbird.febs.mall.entity.MallExpressInfo;
import cc.mrbird.febs.mall.entity.MallOrderRefund;
import cc.mrbird.febs.mall.mapper.MallExpressInfoMapper;
import cc.mrbird.febs.mall.mapper.MallInvoiceMapper;
@@ -78,15 +77,15 @@
    @RequiresPermissions("deliverGoods:update")
    public String deliverGoods(@PathVariable long id, Model model) {
        AdminMallOrderVo data = adminMallOrderService.getMallOrderInfoById(id);
        data.setExpressCom("百世快递");
        MallExpressInfo mallExpressInfo = mallExpressInfoMapper.selectByOrderId(id);
        if(ObjectUtil.isNotEmpty(mallExpressInfo)){
            data.setExpressNo(mallExpressInfo.getExpressNo());
            data.setExpressCom(mallExpressInfo.getExpressCom());
        }else{
            data.setExpressCom("百世快递");
//            data.setExpressNo("JT");
        }
//        data.setExpressCom("百世快递");
//        MallExpressInfo mallExpressInfo = mallExpressInfoMapper.selectByOrderId(id);
//        if(ObjectUtil.isNotEmpty(mallExpressInfo)){
//            data.setExpressNo(mallExpressInfo.getExpressNo());
//            data.setExpressCom(mallExpressInfo.getExpressCom());
//        }else{
//            data.setExpressCom("百世快递");
////            data.setExpressNo("JT");
//        }
        model.addAttribute("deliverInfo", data);
        return FebsUtil.view("modules/order/deliverGoods");
    }
src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallOrderService.java
@@ -25,6 +25,7 @@
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
@Slf4j
@@ -114,20 +115,20 @@
        if(2 != deliveryType){
            return new FebsResponse().fail().message("订单的配送方式不是快递");
        }
        String expressNo = deliverGoodsDto.getExpressNo();
        if(StrUtil.isEmpty(expressNo)){
            return new FebsResponse().fail().message("请输入物流单号");
        }
        String expressCom = deliverGoodsDto.getExpressCom();
        if(StrUtil.isEmpty(expressCom)){
            return new FebsResponse().fail().message("请输入物流公司");
        }
        MallExpressInfo mallExpressInfo = new MallExpressInfo();
        mallExpressInfo.setMemberId(mallOrderInfo.getMemberId());
        mallExpressInfo.setOrderId(mallOrderInfo.getId());
        mallExpressInfo.setExpressNo(expressNo);
        mallExpressInfo.setExpressCom(expressCom);
        mallExpressInfoMapper.insert(mallExpressInfo);
//        String expressNo = deliverGoodsDto.getExpressNo();
//        if(StrUtil.isEmpty(expressNo)){
//            return new FebsResponse().fail().message("请输入物流单号");
//        }
//        String expressCom = deliverGoodsDto.getExpressCom();
//        if(StrUtil.isEmpty(expressCom)){
//            return new FebsResponse().fail().message("请输入物流公司");
//        }
//        MallExpressInfo mallExpressInfo = new MallExpressInfo();
//        mallExpressInfo.setMemberId(mallOrderInfo.getMemberId());
//        mallExpressInfo.setOrderId(mallOrderInfo.getId());
//        mallExpressInfo.setExpressNo(expressNo);
//        mallExpressInfo.setExpressCom(expressCom);
//        mallExpressInfoMapper.insert(mallExpressInfo);
        mallOrderInfoMapper.updateOrderStateAndDeliveryState(mallOrderInfo.getId(),
                OrderStatusEnum.WAIT_FINISH.getValue(),
@@ -469,22 +470,10 @@
        if(2 != deliveryType){
            return new FebsResponse().fail().message("订单的配送方式不是快递");
        }
        String expressNo = deliverGoodsDto.getExpressNo();
        if(StrUtil.isEmpty(expressNo)){
            return new FebsResponse().fail().message("请输入物流单号");
        }
        String expressCom = deliverGoodsDto.getExpressCom();
        if(StrUtil.isEmpty(expressCom)){
            return new FebsResponse().fail().message("请输入物流公司");
        }
        MallExpressInfo mallExpressInfo = mallExpressInfoMapper.selectByOrderId(mallOrderInfo.getId());
        if(ObjectUtil.isEmpty(mallExpressInfo)){
            return new FebsResponse().fail().message("请先发货");
        }
        mallExpressInfo.setExpressNo(expressNo);
        mallExpressInfo.setExpressCom(expressCom);
        mallExpressInfoMapper.updateById(mallExpressInfo);
        mallOrderInfo.setStatus(OrderStatusEnum.FINISH.getValue());
        mallOrderInfo.setReceivingTime(new Date());
        mallOrderInfoMapper.updateById(mallOrderInfo);
        return new FebsResponse().success();
    }
src/main/resources/templates/febs/views/modules/order/deliverGoods.html
@@ -46,20 +46,20 @@
                       autocomplete="off" class="layui-input" readonly>
            </div>
        </div>
        <div class="layui-form-item">
            <label class="layui-form-label febs-form-item-require">物流单号:</label>
            <div class="layui-input-block">
                <input type="text" name="expressNo" lay-verify="required"
                       autocomplete="off" class="layui-input" >
            </div>
        </div>
        <div class="layui-form-item">
            <label class="layui-form-label febs-form-item-require">物流公司:</label>
            <div class="layui-input-block">
                <input type="text" name="expressCom" lay-verify="required"
                       autocomplete="off" class="layui-input" >
            </div>
        </div>
<!--        <div class="layui-form-item">-->
<!--            <label class="layui-form-label febs-form-item-require">物流单号:</label>-->
<!--            <div class="layui-input-block">-->
<!--                <input type="text" name="expressNo" lay-verify="required"-->
<!--                       autocomplete="off" class="layui-input" >-->
<!--            </div>-->
<!--        </div>-->
<!--        <div class="layui-form-item">-->
<!--            <label class="layui-form-label febs-form-item-require">物流公司:</label>-->
<!--            <div class="layui-input-block">-->
<!--                <input type="text" name="expressCom" lay-verify="required"-->
<!--                       autocomplete="off" class="layui-input" >-->
<!--            </div>-->
<!--        </div>-->
        <div class="layui-form-item febs-hide">
            <button class="layui-btn" lay-submit="" lay-filter="deliver-update-form-submit" id="submit"></button>
            <button class="layui-btn" lay-submit="" lay-filter="deliverInfo-update-form-submit" id="deliverInfoSubmit"></button>
src/main/resources/templates/febs/views/modules/order/orderDetail.html
@@ -81,20 +81,20 @@
                <textarea id="lay_edit" lay-verify="orderItems" name = "orderItems" class="layui-textarea" readonly></textarea>
            </div>
        </div>
        <div class="layui-form-item">
            <label class="layui-form-label">物流单号:</label>
            <div class="layui-input-block">
                <input type="text" name="expressNo"
                       autocomplete="off" class="layui-input"  readonly>
            </div>
        </div>
        <div class="layui-form-item">
            <label class="layui-form-label">物流公司:</label>
            <div class="layui-input-block">
                <input type="text" name="expressCom"
                       autocomplete="off" class="layui-input" readonly >
            </div>
        </div>
<!--        <div class="layui-form-item">-->
<!--            <label class="layui-form-label">物流单号:</label>-->
<!--            <div class="layui-input-block">-->
<!--                <input type="text" name="expressNo"-->
<!--                       autocomplete="off" class="layui-input"  readonly>-->
<!--            </div>-->
<!--        </div>-->
<!--        <div class="layui-form-item">-->
<!--            <label class="layui-form-label">物流公司:</label>-->
<!--            <div class="layui-input-block">-->
<!--                <input type="text" name="expressCom"-->
<!--                       autocomplete="off" class="layui-input" readonly >-->
<!--            </div>-->
<!--        </div>-->
    </form>
</div>
@@ -125,8 +125,8 @@
                "orderItems": orderDetail.orderItems,
                "addressArea": orderDetail.addressArea,
                "addressInfo": orderDetail.addressInfo,
                "expressNo": orderDetail.expressNo,
                "expressCom": orderDetail.expressCom,
                // "expressNo": orderDetail.expressNo,
                // "expressCom": orderDetail.expressCom,
                // "payImage": orderDetail.payImage,
                // "payOrderNo": orderDetail.payOrderNo,
                "address": orderDetail.address
src/main/resources/templates/febs/views/modules/order/orderList.html
@@ -125,8 +125,8 @@
        <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" id="importDeliver" lay-event="importDeliver">导入发货</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>
<!-- 表格操作栏 end -->
@@ -335,7 +335,7 @@
                });
            }
            if (layEvent === 'updateDeliver') {
                febs.modal.open('修改物流信息', 'modules/order/deliverGoods/' + data.id, {
                febs.modal.open('确认收货', 'modules/order/deliverGoods/' + data.id, {
                    btn: ['确认','取消'],
                    yes: function (index, layero) {
                        $('#deliver-update').find('#deliverInfoSubmit').trigger('click');
@@ -411,11 +411,11 @@
                        {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: '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: 'carriage', title: '邮费', minWidth: 80,align:'left', totalRow:true},
                        {field: 'amount', title: '总金额', minWidth: 100,align:'left', totalRow:true},
                        {field: 'orderTime', title: '下单时间', minWidth: 200,align:'left'},
                        {field: 'status', title: '状态',
@@ -450,7 +450,7 @@
                    //             return ''
                    //         }
                    //     }, minWidth: 80,align:'center'},
                        {field: 'payMethod', title: '支付方式', minWidth: 100,align:'left'},
                    //     {field: 'payMethod', title: '支付方式', minWidth: 100,align:'left'},
                        {field: 'payTime', title: '支付时间', minWidth: 120,align:'left'},
                        // {field: 'wxOrderNo', title: '支付订单号', minWidth: 120,align:'left'},
                        {title: '操作',
@@ -460,7 +460,7 @@
                                    +'<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>'
                                    +'<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>'
                                }