Browse Source

提交代码

6 tháng trước cách đây
mục cha
commit
f9ba871a92
24 tập tin đã thay đổi với 1228 bổ sung27 xóa
  1. 2 2
      08.src/Xingxi/xingxi-admin/src/main/java/com/xingxi/web/controller/business/order/controller/OrderController.java
  2. 166 0
      08.src/Xingxi/xingxi-admin/src/main/java/com/xingxi/web/controller/business/order/controller/VendorOrderController.java
  3. 8 0
      08.src/Xingxi/xingxi-admin/src/main/java/com/xingxi/web/controller/business/order/domain/OrderVo.java
  4. 55 0
      08.src/Xingxi/xingxi-admin/src/main/java/com/xingxi/web/controller/business/order/domain/VendorOrderDetailVo.java
  5. 17 0
      08.src/Xingxi/xingxi-admin/src/main/java/com/xingxi/web/controller/business/order/mapper/OrderDeliveryExprVoMapper.java
  6. 10 0
      08.src/Xingxi/xingxi-admin/src/main/java/com/xingxi/web/controller/business/order/mapper/OrderDetailVoMapper.java
  7. 35 0
      08.src/Xingxi/xingxi-admin/src/main/java/com/xingxi/web/controller/business/order/service/IOrderDeliveryExprVoService.java
  8. 10 0
      08.src/Xingxi/xingxi-admin/src/main/java/com/xingxi/web/controller/business/order/service/IOrderDetailVoService.java
  9. 114 0
      08.src/Xingxi/xingxi-admin/src/main/java/com/xingxi/web/controller/business/order/service/impl/OrderDeliveryExprVoServiceImpl.java
  10. 13 0
      08.src/Xingxi/xingxi-admin/src/main/java/com/xingxi/web/controller/business/order/service/impl/OrderDetailVoServiceImpl.java
  11. 8 6
      08.src/Xingxi/xingxi-admin/src/main/java/com/xingxi/web/controller/master/merchant/domain/MerchantProdVo.java
  12. 3 0
      08.src/Xingxi/xingxi-admin/src/main/java/com/xingxi/web/controller/master/product/controller/ProdAttrPriceController.java
  13. 4 1
      08.src/Xingxi/xingxi-admin/src/main/resources/mapper/MerchantProdVoMapper.xml
  14. 7 0
      08.src/Xingxi/xingxi-admin/src/main/resources/mapper/OrderDeliveryExprVoMapper.xml
  15. 131 1
      08.src/Xingxi/xingxi-admin/src/main/resources/mapper/OrderDetailVoMapper.xml
  16. 8 0
      08.src/Xingxi/xingxi-admin/src/main/resources/mapper/OrderVoMapper.xml
  17. 8 8
      08.src/Xingxi/xingxi-admin/src/main/resources/static/ruoyi/js/currency.js
  18. 8 8
      08.src/Xingxi/xingxi-admin/src/main/resources/templates/business/order/order.html
  19. 49 0
      08.src/Xingxi/xingxi-admin/src/main/resources/templates/business/vendorOrder/showExpressNo.html
  20. 384 0
      08.src/Xingxi/xingxi-admin/src/main/resources/templates/business/vendorOrder/vendorOrder.html
  21. 138 0
      08.src/Xingxi/xingxi-admin/src/main/resources/templates/business/vendorOrder/vendorOrderDetail.html
  22. 8 0
      08.src/Xingxi/xingxi-admin/src/main/resources/templates/master/merchant/prod/merchantProd.html
  23. 10 1
      08.src/Xingxi/xingxi-admin/src/main/resources/templates/master/product/prodAttrPrice/prodAttrPrice.html
  24. 32 0
      08.src/Xingxi/xingxi-common/src/main/java/com/xingxi/common/enums/EOrderDeliveryStatus.java

+ 2 - 2
08.src/Xingxi/xingxi-admin/src/main/java/com/xingxi/web/controller/business/order/controller/OrderController.java

@@ -20,8 +20,8 @@ import java.util.List;
 /**
  * 订单 操作处理
  *
- * @author hocy
- * @date 2020-01-17
+ * @author xingxi
+ * @date 2025-05-17
  */
 @Controller
 @RequestMapping("/business/order")

+ 166 - 0
08.src/Xingxi/xingxi-admin/src/main/java/com/xingxi/web/controller/business/order/controller/VendorOrderController.java

@@ -0,0 +1,166 @@
+package com.xingxi.web.controller.business.order.controller;
+
+import com.xingxi.business.Order.domain.OrderDeliveryExpr;
+import com.xingxi.business.Order.service.IOrderDeliveryExprService;
+import com.xingxi.common.annotation.Log;
+import com.xingxi.common.core.controller.BaseController;
+import com.xingxi.common.core.domain.AjaxResult;
+import com.xingxi.common.core.page.TableDataInfo;
+import com.xingxi.common.enums.BusinessType;
+import com.xingxi.common.enums.EDelFlag;
+import com.xingxi.common.enums.ERoleKey;
+import com.xingxi.common.utils.ShiroUtils;
+import com.xingxi.common.utils.poi.ExcelUtil;
+import com.xingxi.web.controller.business.order.domain.OrderDetailVo;
+import com.xingxi.web.controller.business.order.domain.OrderVo;
+import com.xingxi.web.controller.business.order.domain.VendorOrderDetailVo;
+import com.xingxi.web.controller.business.order.service.IOrderDeliveryExprVoService;
+import com.xingxi.web.controller.business.order.service.IOrderDetailVoService;
+import com.xingxi.web.controller.business.order.service.IOrderVoService;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 订单 操作处理
+ *
+ * @author xingxi
+ * @date 2025-05-17
+ */
+@Controller
+@RequestMapping("/business/vendorOrder")
+public class VendorOrderController extends BaseController {
+    private final String prefix = "business/vendorOrder";
+
+    @Resource
+    private IOrderVoService orderVoService;
+    @Resource
+    private IOrderDetailVoService orderDetailVoService;
+    @Resource
+    private IOrderDeliveryExprService orderDeliveryExprService;
+    @Resource
+    private IOrderDeliveryExprVoService orderDeliveryExprVoService;
+
+    @RequiresPermissions("business:vendorOrder:view")
+    @GetMapping()
+    public String order() {
+        return prefix + "/vendorOrder";
+    }
+
+    /**
+     * 查询订单 列表
+     */
+    @RequiresPermissions("business:vendorOrder:list")
+    @PostMapping("/list")
+    @ResponseBody
+    public TableDataInfo list(OrderVo orderVo) {
+        startPage();
+        if (ERoleKey.VENDOR.getCode().equals(ShiroUtils.getSysUser().getRoles().get(0).getRoleKey())) {
+            orderVo.setSellerId(ShiroUtils.getUserId());
+        }
+        orderVo.setDelFlag(EDelFlag.NO.getVal());
+        List<VendorOrderDetailVo> list = orderDetailVoService.selectVendorOrderVoList(orderVo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 显示订单明细页
+     */
+    @RequiresPermissions("business:vendorOrder:detail")
+    @GetMapping("/detail/{orderId}")
+    public String detail(@PathVariable("orderId") Long orderId, ModelMap mmap) {
+        OrderVo orderVo = orderVoService.selectOrderVoByOrderId(orderId);
+        mmap.put("orderVo", orderVo);
+        return prefix + "/vendorOrderDetail";
+    }
+
+    /**
+     * 显示订单明细列表
+     */
+    @RequiresPermissions("business:vendorOrder:detail")
+    @PostMapping("/detailList/{orderId}")
+    @ResponseBody
+    public TableDataInfo detailList(@PathVariable("orderId") Long orderId) {
+        OrderDetailVo cond = new OrderDetailVo();
+        cond.setOrderId(orderId);
+        cond.setDelFlag(EDelFlag.NO.getVal());
+        List<OrderDetailVo> orderDetailVoList = orderDetailVoService.selectOrderDetailVoList(cond);
+        return getDataTable(orderDetailVoList);
+    }
+
+    /**
+     * 订单发货
+     */
+    @RequiresPermissions("business:vendorOrder:deliver")
+    @Log(title = "订单发货", businessType = BusinessType.INSERT)
+    @PostMapping("/deliverProd")
+    @ResponseBody
+    public AjaxResult deliverProd(OrderDeliveryExpr orderDeliveryExpr) {
+        return toAjax(orderDeliveryExprVoService.insertOrderDeliveryExpr(orderDeliveryExpr));
+    }
+
+    /**
+     * 订单取消发货
+     */
+    @RequiresPermissions("business:vendorOrder:deliver")
+    @Log(title = "订单取消发货", businessType = BusinessType.DELETE)
+    @PostMapping("/cancelDeliverProd")
+    @ResponseBody
+    public AjaxResult cancelDeliverProd(OrderDeliveryExpr orderDeliveryExpr) {
+        return toAjax(orderDeliveryExprVoService.cancelDeliverProd(orderDeliveryExpr));
+    }
+
+    /**
+     * 更换快递单号
+     */
+    @RequiresPermissions("business:vendorOrder:deliver")
+    @Log(title = "订单取消发货", businessType = BusinessType.UPDATE)
+    @PostMapping("/changeExpressNo")
+    @ResponseBody
+    public AjaxResult changeExpressNo(OrderDeliveryExpr orderDeliveryExpr) {
+        return toAjax(orderDeliveryExprVoService.changeExpressNo(orderDeliveryExpr));
+    }
+
+    /**
+     * 显示快递信息页
+     */
+    @RequiresPermissions("business:vendorOrder:detail")
+    @GetMapping("/showExpress/{orderDeliveryId}")
+    public String showExpress(@PathVariable("orderDeliveryId") Long orderDeliveryId, ModelMap mmap) {
+        mmap.put("orderDeliveryId", orderDeliveryId);
+        return prefix + "/showExpressNo";
+    }
+
+    /**
+     * 查询订单 列表
+     */
+    @RequiresPermissions("business:vendorOrder:list")
+    @PostMapping("/expressList")
+    @ResponseBody
+    public TableDataInfo expressList(OrderDeliveryExpr orderDeliveryExpr) {
+        startPage();
+        List<OrderDeliveryExpr> list = orderDeliveryExprService.selectOrderDeliveryExprList(orderDeliveryExpr);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出订单明细
+     */
+    @RequiresPermissions("business:vendorOrder:export")
+    @Log(title = "发货订单详细", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    @ResponseBody
+    public AjaxResult export(OrderVo orderVo) {
+        if (ERoleKey.VENDOR.getCode().equals(ShiroUtils.getSysUser().getRoles().get(0).getRoleKey())) {
+            orderVo.setSellerId(ShiroUtils.getUserId());
+        }
+        orderVo.setDelFlag(EDelFlag.NO.getVal());
+        List<VendorOrderDetailVo> list = orderDetailVoService.selectVendorOrderVoList(orderVo);
+        ExcelUtil<VendorOrderDetailVo> util = new ExcelUtil<>(VendorOrderDetailVo.class);
+        return util.exportExcel(list, "发货订单详细");
+    }
+}

+ 8 - 0
08.src/Xingxi/xingxi-admin/src/main/java/com/xingxi/web/controller/business/order/domain/OrderVo.java

@@ -14,8 +14,16 @@ import lombok.ToString;
 @ToString(callSuper = true)
 public class OrderVo extends Order {
     private static final long serialVersionUID = 1L;
+    // 店铺名称
+    private String orderDetailStatus;
+    // 店铺名称
     private String sellerName;
+    // 店铺联系方式
     private String sellerMobile;
+    // 购买者姓名
     private String buyerName;
+    // 商品名称
     private String prodName;
+    // 快递单号
+    private String expressNo;
 }

+ 55 - 0
08.src/Xingxi/xingxi-admin/src/main/java/com/xingxi/web/controller/business/order/domain/VendorOrderDetailVo.java

@@ -0,0 +1,55 @@
+package com.xingxi.web.controller.business.order.domain;
+
+import com.xingxi.business.Order.domain.OrderDetail;
+import lombok.Data;
+import lombok.ToString;
+
+import java.util.Date;
+
+/**
+ * 订单 表 t_order
+ *
+ * @author xingxi
+ * @date 2025-05-20
+ */
+@Data
+@ToString(callSuper = true)
+public class VendorOrderDetailVo extends OrderDetail {
+    private static final long serialVersionUID = 1L;
+    // 订单编号
+    private String orderNo;
+    // 下单时间
+    private Date orderTime;
+    // 店铺名称
+    private String sellerName;
+    // 店铺联系方式
+    private String sellerMobile;
+    // 购买者姓名
+    private String buyerName;
+    // 收件人省
+    private String recProv;
+    // 收件人市
+    private String recCity;
+    // 收件人区
+    private String recDistrict;
+    // 收件人地址
+    private String recAddress;
+    // 收件人姓名
+    private String recName;
+    // 收件人联系方式
+    private String recMobile;
+    // 订单备注
+    private String remark;
+    // 商品名称
+    private String prodName;
+    // 商品分类名称
+    private String className;
+    // 快递单号
+    private Long orderDeliveryId;
+    // 发货时间
+    private Date deliveryTime;
+    // 确认收货时间
+    private Date confirmTime;
+    // 发货单状态
+    private String orderDeliveryStatus;
+}

+ 17 - 0
08.src/Xingxi/xingxi-admin/src/main/java/com/xingxi/web/controller/business/order/mapper/OrderDeliveryExprVoMapper.java

@@ -0,0 +1,17 @@
+package com.xingxi.web.controller.business.order.mapper;
+
+/**
+ * 订单商品快递明细Mapper接口
+ *
+ * @author xingxi
+ * @date 2025-03-06
+ */
+public interface OrderDeliveryExprVoMapper {
+    /**
+     * 删除订单商品快递明细信息
+     *
+     * @param orderDeliveryId 订单明细发货主键
+     * @return 结果
+     */
+    int deleteOrderDeliveryExprByOrderDeliveryId(Long orderDeliveryId);
+}

+ 10 - 0
08.src/Xingxi/xingxi-admin/src/main/java/com/xingxi/web/controller/business/order/mapper/OrderDetailVoMapper.java

@@ -1,6 +1,8 @@
 package com.xingxi.web.controller.business.order.mapper;
 
 import com.xingxi.web.controller.business.order.domain.OrderDetailVo;
+import com.xingxi.web.controller.business.order.domain.OrderVo;
+import com.xingxi.web.controller.business.order.domain.VendorOrderDetailVo;
 import org.springframework.stereotype.Repository;
 
 import java.util.List;
@@ -28,4 +30,12 @@ public interface OrderDetailVoMapper {
      * @return 订单详细Vo 集合
      */
     List<OrderDetailVo> selectOrderDetailVoList(OrderDetailVo orderDetailVo);
+
+    /**
+     * 查询订单详细Vo 列表
+     *
+     * @param orderVo 订单Vo
+     * @return 订单详细Vo 集合
+     */
+    List<VendorOrderDetailVo> selectVendorOrderVoList(OrderVo orderVo);
 }

+ 35 - 0
08.src/Xingxi/xingxi-admin/src/main/java/com/xingxi/web/controller/business/order/service/IOrderDeliveryExprVoService.java

@@ -0,0 +1,35 @@
+package com.xingxi.web.controller.business.order.service;
+
+import com.xingxi.business.Order.domain.OrderDeliveryExpr;
+
+/**
+ * 订单明细发货Service接口
+ *
+ * @author xingxi
+ * @date 2025-03-06
+ */
+public interface IOrderDeliveryExprVoService {
+    /**
+     * 新增订单商品快递明细
+     *
+     * @param OrderDeliveryExpr 订单商品快递明细
+     * @return 结果
+     */
+    int insertOrderDeliveryExpr(OrderDeliveryExpr OrderDeliveryExpr);
+
+    /**
+     * 删除订单商品快递明细信息
+     *
+     * @param orderDeliveryExpr 订单商品快递明细
+     * @return 结果
+     */
+    int cancelDeliverProd(OrderDeliveryExpr orderDeliveryExpr);
+
+    /**
+     * 更换快递单号
+     *
+     * @param orderDeliveryExpr 订单商品快递明细
+     * @return 结果
+     */
+    int changeExpressNo(OrderDeliveryExpr orderDeliveryExpr);
+}

+ 10 - 0
08.src/Xingxi/xingxi-admin/src/main/java/com/xingxi/web/controller/business/order/service/IOrderDetailVoService.java

@@ -1,6 +1,8 @@
 package com.xingxi.web.controller.business.order.service;
 
 import com.xingxi.web.controller.business.order.domain.OrderDetailVo;
+import com.xingxi.web.controller.business.order.domain.OrderVo;
+import com.xingxi.web.controller.business.order.domain.VendorOrderDetailVo;
 
 import java.util.List;
 
@@ -26,4 +28,12 @@ public interface IOrderDetailVoService {
      * @return 订单Vo 集合
      */
     List<OrderDetailVo> selectOrderDetailVoList(OrderDetailVo orderDetailVo);
+
+    /**
+     * 查询供应商用订单DetailVo 集合
+     *
+     * @param orderVo 订单Vo
+     * @return 订单Vo 集合
+     */
+    List<VendorOrderDetailVo> selectVendorOrderVoList(OrderVo orderVo);
 }

+ 114 - 0
08.src/Xingxi/xingxi-admin/src/main/java/com/xingxi/web/controller/business/order/service/impl/OrderDeliveryExprVoServiceImpl.java

@@ -0,0 +1,114 @@
+package com.xingxi.web.controller.business.order.service.impl;
+
+import com.xingxi.business.Order.domain.OrderDelivery;
+import com.xingxi.business.Order.domain.OrderDeliveryExpr;
+import com.xingxi.business.Order.mapper.OrderDeliveryExprMapper;
+import com.xingxi.business.Order.mapper.OrderDeliveryMapper;
+import com.xingxi.common.enums.EDelFlag;
+import com.xingxi.common.enums.EOrderDeliveryStatus;
+import com.xingxi.common.exception.BusinessException;
+import com.xingxi.common.utils.DateUtils;
+import com.xingxi.common.utils.ShiroUtils;
+import com.xingxi.web.controller.business.order.mapper.OrderDeliveryExprVoMapper;
+import com.xingxi.web.controller.business.order.service.IOrderDeliveryExprVoService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 订单商品快递明细Service业务层处理
+ *
+ * @author xingxi
+ * @date 2025-03-06
+ */
+@Service
+public class OrderDeliveryExprVoServiceImpl implements IOrderDeliveryExprVoService {
+    @Resource
+    private OrderDeliveryMapper orderDeliveryMapper;
+    @Resource
+    private OrderDeliveryExprMapper orderDeliveryExprMapper;
+    @Resource
+    private OrderDeliveryExprVoMapper orderDeliveryExprVoMapper;
+
+    /**
+     * 新增订单商品快递明细
+     *
+     * @param orderDeliveryExpr 订单商品快递明细
+     * @return 结果
+     */
+    @Override
+    @Transactional
+    public int insertOrderDeliveryExpr(OrderDeliveryExpr orderDeliveryExpr) {
+        int effectRows = 0;
+        Date updateTime = DateUtils.getNowDate();
+
+        OrderDelivery orderDelivery = orderDeliveryMapper.selectOrderDeliveryByOrderDeliveryId(orderDeliveryExpr.getOrderDeliveryId());
+        orderDelivery.setOrderDeliveryStatus(EOrderDeliveryStatus.DELIVERED.getVal());
+        orderDelivery.setUpdateUser(ShiroUtils.getLoginName());
+        orderDelivery.setUpdateTime(updateTime);
+        effectRows += orderDeliveryMapper.updateOrderDelivery(orderDelivery);
+
+        orderDeliveryExpr.setDeliveryTime(updateTime);
+        orderDeliveryExpr.setDelFlag(EDelFlag.NO.getVal());
+        orderDeliveryExpr.setCreateUser(ShiroUtils.getLoginName());
+        orderDeliveryExpr.setCreateTime(updateTime);
+        effectRows += orderDeliveryExprMapper.insertOrderDeliveryExpr(orderDeliveryExpr);
+
+        return effectRows;
+    }
+
+    /**
+     * 删除订单商品快递明细信息
+     *
+     * @param orderDeliveryExpr 订单商品快递明细
+     * @return 结果
+     */
+    @Override
+    @Transactional
+    public int cancelDeliverProd(OrderDeliveryExpr orderDeliveryExpr) {
+        int effectRows = 0;
+        Date updateTime = DateUtils.getNowDate();
+
+        OrderDelivery orderDelivery = orderDeliveryMapper.selectOrderDeliveryByOrderDeliveryId(orderDeliveryExpr.getOrderDeliveryId());
+        orderDelivery.setOrderDeliveryStatus(EOrderDeliveryStatus.PENDING.getVal());
+        orderDelivery.setUpdateUser(ShiroUtils.getLoginName());
+        orderDelivery.setUpdateTime(updateTime);
+        effectRows = orderDeliveryMapper.updateOrderDelivery(orderDelivery);
+        if (effectRows != 1) {
+            throw new BusinessException("更新订单明细发货单表时发生错误!");
+        }
+
+        effectRows = orderDeliveryExprVoMapper.deleteOrderDeliveryExprByOrderDeliveryId(orderDeliveryExpr.getOrderDeliveryId());
+        if (effectRows == 0) {
+            throw new BusinessException("更新订单商品快递明细表时发生错误!");
+        }
+        return effectRows;
+    }
+
+    /**
+     * 更换快递单号
+     *
+     * @param orderDeliveryExpr 订单商品快递明细
+     * @return 结果
+     */
+    @Override
+    @Transactional
+    public int changeExpressNo(OrderDeliveryExpr orderDeliveryExpr) {
+        int effectRows = 0;
+        Date updateTime = DateUtils.getNowDate();
+        String expressNo = orderDeliveryExpr.getExpressNo();
+        orderDeliveryExpr.setExpressNo(null);
+        List<OrderDeliveryExpr> updateList = orderDeliveryExprMapper.selectOrderDeliveryExprList(orderDeliveryExpr);
+        for (OrderDeliveryExpr updateData : updateList) {
+            updateData.setExpressNo(expressNo);
+            updateData.setUpdateUser(ShiroUtils.getLoginName());
+            updateData.setUpdateTime(updateTime);
+            effectRows += orderDeliveryExprMapper.updateOrderDeliveryExpr(updateData);
+        }
+
+        return effectRows;
+    }
+}

+ 13 - 0
08.src/Xingxi/xingxi-admin/src/main/java/com/xingxi/web/controller/business/order/service/impl/OrderDetailVoServiceImpl.java

@@ -1,6 +1,8 @@
 package com.xingxi.web.controller.business.order.service.impl;
 
 import com.xingxi.web.controller.business.order.domain.OrderDetailVo;
+import com.xingxi.web.controller.business.order.domain.OrderVo;
+import com.xingxi.web.controller.business.order.domain.VendorOrderDetailVo;
 import com.xingxi.web.controller.business.order.mapper.OrderDetailVoMapper;
 import com.xingxi.web.controller.business.order.service.IOrderDetailVoService;
 import org.springframework.stereotype.Service;
@@ -40,4 +42,15 @@ public class OrderDetailVoServiceImpl implements IOrderDetailVoService {
     public List<OrderDetailVo> selectOrderDetailVoList(OrderDetailVo orderDetailVo) {
         return orderDetailVoMapper.selectOrderDetailVoList(orderDetailVo);
     }
+
+    /**
+     * 查询订单详细Vo 列表
+     *
+     * @param orderVo 订单Vo
+     * @return 订单详细Vo 集合
+     */
+    @Override
+    public List<VendorOrderDetailVo> selectVendorOrderVoList(OrderVo orderVo) {
+        return orderDetailVoMapper.selectVendorOrderVoList(orderVo);
+    }
 }

+ 8 - 6
08.src/Xingxi/xingxi-admin/src/main/java/com/xingxi/web/controller/master/merchant/domain/MerchantProdVo.java

@@ -5,6 +5,8 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.ToString;
 
+import java.math.BigDecimal;
+
 /**
  * 商品对象 m_prod
  *
@@ -17,14 +19,14 @@ import lombok.ToString;
 public class MerchantProdVo extends MerchantProd {
     private static final long serialVersionUID = 1L;
 
-    //店铺名称
+    // 店铺名称
     private String mercName;
-    //商品名称
+    // 商品名称
     private String prodName;
-
-    //商品名称
+    // 商品名称
     private String attrName;
-
-    //选择的属性Id
+    // 单价
+    private BigDecimal price;
+    // 选择的属性Id
     private String prodAttrIds;
 }

+ 3 - 0
08.src/Xingxi/xingxi-admin/src/main/java/com/xingxi/web/controller/master/product/controller/ProdAttrPriceController.java

@@ -19,6 +19,7 @@ import org.springframework.ui.ModelMap;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import java.math.BigDecimal;
 
 /**
  * 商品属性价格Controller
@@ -60,6 +61,7 @@ public class ProdAttrPriceController extends BaseController {
         prodAttrPriceVo.setBuyerName(ERoleKey.CUSTOMER.getDesc());
         prodAttrPriceVo.setBuyerRoleKey(ERoleKey.CUSTOMER.getCode());
         prodAttrPriceVo.setBuyerRoleName(ERoleKey.CUSTOMER.getDesc());
+        prodAttrPriceVo.setPrice(prodAttrPriceVo.getPrice().divide(BigDecimal.valueOf(100)));
         mMap.put("prodAttrPriceVo", prodAttrPriceVo);
         return prefix + "/prodAttrPrice";
     }
@@ -72,6 +74,7 @@ public class ProdAttrPriceController extends BaseController {
     @PostMapping("/edit")
     @ResponseBody
     public AjaxResult editSave(@RequestBody ProdAttrPrice prodAttrPrice) {
+        prodAttrPrice.setPrice(prodAttrPrice.getPrice().multiply(BigDecimal.valueOf(100)));
         return toAjax(prodAttrPriceVoService.updateProdAttrPrice(prodAttrPrice));
     }
 }

+ 4 - 1
08.src/Xingxi/xingxi-admin/src/main/resources/mapper/MerchantProdVoMapper.xml

@@ -16,6 +16,7 @@
         <result property="mercName"     column="mercName"       />
         <result property="prodName"     column="prodName"       />
         <result property="attrName"     column="attrName"       />
+        <result property="price"        column="price"          />
     </resultMap>
 
     <sql id="selectMerchantProdVo">
@@ -28,10 +29,12 @@
              , m_merchant.mercName
              , m_prod.prodName
              , m_prod_attr.attrName
+             , m_prod_attr_price.price
         from m_merchant_prod
         inner join m_merchant on m_merchant.mercId = m_merchant_prod.mercId
         inner join m_prod on m_prod.id = m_merchant_prod.prodId
-        inner join m_prod_attr on m_prod_attr.prodAttrId = m_merchant_prod.prodAttrId
+        inner join m_prod_attr on m_prod_attr.prodId = m_merchant_prod.prodId and m_prod_attr.prodAttrId = m_merchant_prod.prodAttrId
+        left join m_prod_attr_price on m_prod_attr_price.sellerId = m_merchant_prod.mercId and m_prod_attr_price.prodId = m_merchant_prod.prodId and m_prod_attr_price.prodAttrId = m_merchant_prod.prodAttrId
     </sql>
 
     <select id="selectMerchantProdVoById" parameterType="Long" resultMap="MerchantProdResult">

+ 7 - 0
08.src/Xingxi/xingxi-admin/src/main/resources/mapper/OrderDeliveryExprVoMapper.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.xingxi.web.controller.business.order.mapper.OrderDeliveryExprVoMapper">
+    <delete id="deleteOrderDeliveryExprByOrderDeliveryId" parameterType="Long">
+        delete from t_order_delivery_expr where orderDeliveryId = #{orderDeliveryId}
+    </delete>
+</mapper>

+ 131 - 1
08.src/Xingxi/xingxi-admin/src/main/resources/mapper/OrderDetailVoMapper.xml

@@ -23,9 +23,61 @@
         <result property="createTime"           column="createTime"         />
         <result property="updateUser"           column="updateUser"         />
         <result property="updateTime"           column="updateTime"         />
+        <result property="orderId"              column="orderId"            />
+        <result property="orderNo"              column="orderNo"            />
+        <result property="orderTime"            column="orderTime"          />
+        <result property="recProv"              column="recProv"            />
+        <result property="recCity"              column="recCity"            />
+        <result property="recDistrict"          column="recDistrict"        />
+        <result property="recAddress"           column="recAddress"         />
+        <result property="recName"              column="recName"            />
+        <result property="recMobile"            column="recMobile"          />
+        <result property="remark"               column="remark"             />
         <result property="className"            column="className"          />
     </resultMap>
 
+    <resultMap type="VendorOrderDetailVo" id="VendorOrderDetailVoResult">
+        <result property="orderDetailId"        column="orderDetailId"          />
+        <result property="orderId"              column="orderId"                />
+        <result property="orderDetailStatus"    column="orderDetailStatus"      />
+        <result property="prodId"               column="prodId"                 />
+        <result property="prodName"             column="prodName"               />
+        <result property="prodAttrId"           column="prodAttrId"             />
+        <result property="prodAttrName"         column="prodAttrName"           />
+        <result property="vendorId"             column="vendorId"               />
+        <result property="quantity"             column="quantity"               />
+        <result property="afterSalesQty"        column="afterSalesQty"          />
+        <result property="refundQty"            column="refundQty"              />
+        <result property="price"                column="price"                  />
+        <result property="orderAmount"          column="orderAmount"            />
+        <result property="payAmount"            column="payAmount"              />
+        <result property="confirmTime"          column="confirmTime"            />
+        <result property="finishTime"           column="finishTime"             />
+        <result property="delFlag"              column="delFlag"                />
+        <result property="createUser"           column="createUser"             />
+        <result property="createTime"           column="createTime"             />
+        <result property="updateUser"           column="updateUser"             />
+        <result property="updateTime"           column="updateTime"             />
+        <result property="orderNo"              column="orderNo"                />
+        <result property="orderTime"            column="orderTime"              />
+        <result property="sellerName"           column="sellerName"             />
+        <result property="sellerMobile"         column="sellerMobile"           />
+        <result property="buyerName"            column="buyerName"              />
+        <result property="recProv"              column="recProv"                />
+        <result property="recCity"              column="recCity"                />
+        <result property="recDistrict"          column="recDistrict"            />
+        <result property="recAddress"           column="recAddress"             />
+        <result property="recName"              column="recName"                />
+        <result property="recMobile"            column="recMobile"              />
+        <result property="remark"               column="remark"                 />
+        <result property="prodName"             column="prodName"               />
+        <result property="className"            column="className"              />
+        <result property="orderDeliveryId"      column="orderDeliveryId"        />
+        <result property="orderDeliveryStatus"  column="orderDeliveryStatus"    />
+        <result property="deliveryTime"         column="deliveryTime"           />
+        <result property="confirmTime"          column="confirmTime"            />
+    </resultMap>
+
     <sql id="selectOrderDetailVo">
         select t_order_detail.orderDetailId
              , t_order_detail.orderId
@@ -49,7 +101,6 @@
              , t_order_detail.updateUser
              , t_order_detail.updateTime
              , m_prod_class.className as className
-             , m_prod_class.className as className
         from t_order_detail
         inner join m_prod on m_prod.id = t_order_detail.prodId
         inner join m_prod_class on m_prod_class.prodClassId = m_prod.prodClassId
@@ -64,4 +115,83 @@
         <include refid="selectOrderDetailVo"/>
         where t_order_detail.orderId = #{orderId}
     </select>
+
+    <select id="selectVendorOrderVoList" parameterType="OrderVo" resultMap="VendorOrderDetailVoResult">
+        select t_order.orderId
+             , t_order.orderNo
+             , t_order.orderTime
+             , t_order.recProv
+             , t_order.recCity
+             , t_order.recDistrict
+             , t_order.recAddress
+             , t_order.recName
+             , t_order.recMobile
+             , t_order.remark
+             , t_order_detail.orderDetailId
+             , t_order_detail.orderDetailStatus
+             , t_order_detail.vendorId
+             , t_order_detail.quantity
+             , t_order_detail.afterSalesQty
+             , t_order_detail.refundQty
+             , t_order_detail.price
+             , t_order_detail.orderAmount
+             , t_order_detail.payAmount
+             , t_order_detail.confirmTime
+             , t_order_detail.finishTime
+             , t_order_delivery.orderDeliveryId
+             , t_order_delivery.orderDeliveryStatus
+             , t_order_delivery.prodId
+             , t_order_delivery.prodName
+             , t_order_delivery.prodAttrId
+             , t_order_delivery.prodAttrName
+             , m_merchant.mercName as sellerName
+             , m_merchant.mobile as sellerMobile
+             , sys_user.user_name as buyerName
+             , m_prod_class.className as className
+        from t_order
+        inner join m_merchant on m_merchant.mercId = t_order.sellerId
+        inner join sys_user on sys_user.user_id = t_order.buyerId
+        inner join t_order_detail on t_order_detail.orderId = t_order.orderId and t_order_detail.delFlag = '0'
+        inner join m_merchant_prod on m_merchant_prod.mercId = t_order.sellerId and m_merchant_prod.prodId = t_order_detail.prodId
+                                          and m_merchant_prod.prodAttrId = t_order_detail.prodAttrId
+        inner join m_prod on m_prod.id = t_order_detail.prodId
+        inner join m_prod_class on m_prod_class.prodClassId = m_prod.prodClassId
+        inner join t_order_delivery on t_order_delivery.orderDetailId = t_order_detail.orderDetailId and t_order_delivery.orderId = t_order_delivery.orderId
+                                          and t_order_delivery.delFlag = '0'
+        <where>
+            <if test="orderId != null "> and t_order.orderId = #{orderId}</if>
+            <if test="orderNo != null and orderNo != ''"> and t_order.orderNo like concat('%', #{orderNo}, '%')</if>
+            <if test="orderDetailStatus != null and orderDetailStatus != ''"> and t_order_detail.orderDetailStatus = #{orderDetailStatus}</if>
+            <if test="recProv != null and recProv != ''"> and t_order.recProv like concat('%', #{recProv}, '%')</if>
+            <if test="recCity != null and recCity != ''"> and t_order.recCity like concat('%', #{recCity}, '%')</if>
+            <if test="recDistrict != null and recDistrict != ''"> and t_order.recDistrict like concat('%', #{recDistrict}, '%')</if>
+            <if test="recName != null and recName != ''"> and t_order.recName like concat('%', #{recName}, '%')</if>
+            <if test="recMobile != null and recMobile != ''"> and t_order.recMobile like concat('%', #{recMobile}, '%')</if>
+            <if test="params.orderTimeFrom != null and params.orderTimeFrom != ''"><!-- 开始时间检索 -->
+                and date_format(t_order.orderTime,'%y%m%d') &gt;= date_format(#{params.orderTimeFrom},'%y%m%d')
+            </if>
+            <if test="params.orderTimeTo != null and params.orderTimeTo != ''"><!-- 结束时间检索 -->
+                and date_format(t_order.orderTime,'%y%m%d') &lt;= date_format(#{params.orderTimeTo},'%y%m%d')
+            </if>
+            <if test="params.cancelTimeFrom != null and params.cancelTimeFrom != ''"><!-- 开始时间检索 -->
+                and date_format(t_order.cancelTime,'%y%m%d') &gt;= date_format(#{params.cancelTimeFrom},'%y%m%d')
+            </if>
+            <if test="params.cancelTimeTo != null and params.cancelTimeTo != ''"><!-- 结束时间检索 -->
+                and date_format(t_order.cancelTime,'%y%m%d') &lt;= date_format(#{params.cancelTimeTo},'%y%m%d')
+            </if>
+            <if test="buyerName != null and buyerName != ''"> and sys_user.user_name like concat('%', #{buyerName}, '%')</if>
+            <if test="sellerName != null and sellerName != ''"> and m_merchant.mercName like concat('%', #{sellerName}, '%')</if>
+            <if test="prodName != null and prodName != '' "> and t_order_delivery.prodName like concat('%', #{prodName}, '%')</if>
+            <if test="expressNo != null and expressNo != '' ">
+                and exists(select t_order_detail.orderDetailid from t_order_detail
+                inner join t_order_delivery on t_order_delivery.orderDetailId = t_order_detail.orderDetailId and t_order_delivery.orderId = t_order_delivery.orderId
+                inner join t_order_delivery_expr on t_order_delivery_expr.orderDetailId = t_order_detail.orderDetailId and t_order_delivery_expr.orderDeliveryId = t_order_delivery.orderDeliveryId
+                where t_order.orderid = t_order_detail.orderid
+                and t_order_delivery_expr.expressNo like concat('%', #{expressNo}, '%')
+                )
+            </if>
+            and t_order.delFlag = '0'
+        </where>
+        order by t_order.orderTime, t_order.orderId, t_order_detail.orderDetailId
+    </select>
 </mapper>

+ 8 - 0
08.src/Xingxi/xingxi-admin/src/main/resources/mapper/OrderVoMapper.xml

@@ -100,6 +100,14 @@
                 where t_order_detail.prodName like concat('%', #{prodName}, '%')
                 )
             </if>
+            <if test="expressNo != null and expressNo != '' ">
+                and exists(select t_order_detail.orderDetailid from t_order_detail
+                inner join t_order_delivery on t_order_delivery.orderDetailId = t_order_detail.orderDetailId and t_order_delivery.orderId = t_order_delivery.orderId
+                inner join t_order_delivery_expr on t_order_delivery_expr.orderDetailId = t_order_detail.orderDetailId and t_order_delivery_expr.orderDeliveryId = t_order_delivery.orderDeliveryId
+                where t_order.orderid = t_order_detail.orderid
+                and t_order_delivery_expr.expressNo like concat('%', #{expressNo}, '%')
+                )
+            </if>
         </where>
     </select>
 </mapper>

+ 8 - 8
08.src/Xingxi/xingxi-admin/src/main/resources/static/ruoyi/js/currency.js

@@ -1,8 +1,8 @@
 function formatCurrency(number, n) {
-    if(!number && number != 0) {
+    if(!number && number !== 0) {
         return null;
     }
-    if (n != 0) {
+    if (n !== 0) {
         n = (n > 0 && n <= 20) ? n : 2;
     }
     number = parseFloat((number + "").replace(/[^\d\.-]/g, "")).toFixed(n) + "";
@@ -11,10 +11,10 @@ function formatCurrency(number, n) {
 
     var show_html = "";
     for (i = 0; i < sub_val.length; i++) {
-        show_html += sub_val[i] + ((i + 1) % 3 == 0 && (i + 1) != sub_val.length ? "," : "");
+        show_html += sub_val[i] + ((i + 1) % 3 === 0 && (i + 1) !== sub_val.length ? "," : "");
     }
 
-    if (n == 0) {
+    if (n === 0) {
         return show_html.split("").reverse().join("");
     } else {
         return show_html.split("").reverse().join("") + "." + sub_xs;
@@ -23,11 +23,11 @@ function formatCurrency(number, n) {
 
 /**
  * 分转元
- * @param {number} yuan
+ * @param {number} 
  * @param {boolean} format 是否格式化
  */
 function centesToYuan(centes, format) {
-    if(!centes && centes != 0) {
+    if(!centes && centes !== 0) {
         return null;
     }
     var yuan = (centes / 100).toFixed(2);
@@ -51,7 +51,7 @@ function yuanToCents(yuan) {
  * 积分增加千分位
  * */
 function formatPoint(number) {
-    if(!number && number != 0) {
+    if(!number && number !== 0) {
         return null;
     }
 
@@ -61,7 +61,7 @@ function formatPoint(number) {
 
     var show_html = "";
     for (i = 0; i < sub_val.length; i++) {
-        show_html += sub_val[i] + ((i + 1) % 3 == 0 && (i + 1) != sub_val.length ? "," : "");
+        show_html += sub_val[i] + ((i + 1) % 3 === 0 && (i + 1) !== sub_val.length ? "," : "");
     }
 
     return show_html.split("").reverse().join("");

+ 8 - 8
08.src/Xingxi/xingxi-admin/src/main/resources/templates/business/order/order.html

@@ -106,6 +106,14 @@
 						sortable: false
 					},
 					{
+						field : 'orderStatus',
+						title : '订单状态',
+						sortable: false,
+						formatter: function(value, row, index) {
+							return $.table.selectDictLabel(datas, value);
+						}
+					},
+					{
 						field : 'orderAmount',
 						title : '订单总额',
 						sortable: false,
@@ -165,14 +173,6 @@
 						sortable: false
 					},
 					{
-						field : 'orderStatus',
-						title : '订单状态',
-						sortable: false,
-						formatter: function(value, row, index) {
-							return $.table.selectDictLabel(datas, value);
-						}
-					},
-					{
 						title: '操作',
 						align: 'center',
 						formatter: function(value, row, index) {

+ 49 - 0
08.src/Xingxi/xingxi-admin/src/main/resources/templates/business/vendorOrder/showExpressNo.html

@@ -0,0 +1,49 @@
+<!DOCTYPE html>
+<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
+<head>
+    <th:block th:include="include :: header('订单列表')" />
+</head>
+<body class="gray-bg">
+    <div class="container-div">
+        <form id="formId">
+            <input id="orderDeliveryId" name="orderDeliveryId" type="hidden" th:value="${orderDeliveryId}">
+        </form>
+        <div class="col-sm-12 select-table table-striped">
+            <table id="bootstrap-table" data-mobile-responsive="true"></table>
+        </div>
+    </div>
+	<th:block th:include="include :: footer" />
+    <script th:inline="javascript">
+        var prefix = ctx + "business/vendorOrder";
+
+		$(function() {
+			var options = {
+				url: prefix + "/expressList",
+				createUrl: prefix + "/add",
+				updateUrl: prefix + "/edit/{id}",
+				removeUrl: prefix + "/remove",
+				exportUrl: prefix + "/export",
+				modalName: "快递单号明细",
+				showSearch: false,
+				showColumns: false,
+				pageSize: 5,
+				columns: [
+					{
+						field : 'expressNo',
+						title : '快递编号',
+                    },
+                    {
+                        field : 'deliveryTime',
+                        title : '发货时间'
+                    },
+                    {
+                        field : 'confirmTime',
+                        title : '确认收货时间',
+                    }
+				]
+			};
+			$.table.init(options);
+        });
+    </script>
+</body>
+</html>

+ 384 - 0
08.src/Xingxi/xingxi-admin/src/main/resources/templates/business/vendorOrder/vendorOrder.html

@@ -0,0 +1,384 @@
+<!DOCTYPE html>
+<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
+<head>
+    <th:block th:include="include :: header('订单列表')" />
+</head>
+<body class="gray-bg">
+    <div class="container-div">
+        <div class="row">
+            <div class="col-sm-12 search-collapse">
+                <form id="formId">
+					<div class="select-list">
+						<ul>
+							<li>
+								订单编号:<input type="text" name="orderNo" placeholder="订单编号"/>
+							</li>
+							<li>
+								商品名称:<input type="text" name="prodName" placeholder="商品名称"/>
+							</li>
+							<li>
+								收件人姓名:<input type="text" name="recName" placeholder="收件人姓名"/>
+							</li>
+							<li>
+								收件人手机:<input type="text" name="recMobile" placeholder="收件人手机"/>
+							</li>
+							<li>
+								快递编号:<input type="text" name="expressNo" placeholder="快递编号"/>
+							</li>
+							<li shiro:hasPermission="platform:order:show">
+								商品分类:
+								<select name="prodClass" style="width: 200px;" th:with="prodClasses=${@product.getProdClasses()}" >
+									<option value="">所有</option>
+									<option th:each="prodClass : ${prodClasses}" th:text="${prodClass.className}" th:value="${prodClass.prodClassId}"></option>
+								</select>
+							</li>
+							<li class="select-time">
+								<label>订单时间: </label>
+								<input type="text" class="time-input" placeholder="开始时间" id="orderTimeFrom" name="params[orderTimeFrom]"/>
+								<span>-</span>
+								<input type="text" class="time-input" placeholder="结束时间" id="orderTimeTo" name="params[orderTimeTo]"/>
+							</li>
+							<li class="select-time">
+								<label>取消时间: </label>
+								<input type="text" class="time-input" placeholder="开始时间" id="cancel TimeFrom" name="params[cancelTimeFrom]"/>
+								<span>-</span>
+								<input type="text" class="time-input" placeholder="结束时间" id="cancelTimeTo" name="params[cancelTimeTo]"/>
+							</li>
+							<li>
+								订单状态:
+								<select name="orderDetailStatus" th:with="type=${@dict.getType('order_detail_status')}">
+									<option value="">所有</option>
+									<option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"></option>
+								</select>
+							</li>
+						</ul>
+						<ul>
+							<li>
+								<a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
+								<a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset()"><i class="fa fa-refresh"></i>&nbsp;重置</a>
+							</li>
+						</ul>
+					</div>
+                </form>
+            </div>
+            
+            <div class="btn-group-sm" id="toolbar" role="group">
+				<a class="btn btn-warning multiple" id="btnPrintPickForm" onclick="printPickForm()">
+					<i class="glyphicon glyphicon-baby-formula"></i> 打印拣货单
+				</a>
+				<a class="btn btn-info multiple" id="btnExportOrderDetail" onclick="exportOrderDetail()">
+					<i class="glyphicon glyphicon-check"></i> 导出订单明细
+				</a>
+				<a class="btn btn-success multiple" id="btnImportOrderDetail" onclick="importOrderDetail()">
+					<i class="glyphicon glyphicon-check"></i> 导入物流单号
+				</a>
+            </div>
+            <div class="col-sm-12 select-table table-striped">
+                <table id="bootstrap-table" data-mobile-responsive="true"></table>
+            </div>
+        </div>
+    </div>
+	<!-- 设置更换单号区域 -->
+	<script id="divInputExpressNo" type="text/template">
+		<div class="col-xs-offset-2">
+			<form id="frmInputExpressNo">
+				<div class="form-group" style="margin-top: 15px;">
+					<label th:for="expressNo">快递单号: </label>
+					<input type="text" id="expressNo" placeholder="快递单号">
+				</div>
+			</form>
+		</div>
+	</script>
+	<!-- 设置更换单号区域 -->
+	<script id="divChangeExpressNo" type="text/template">
+		<div class="col-xs-offset-2">
+			<form id="frmChangeExpressNo">
+				<div class="form-group" style="margin-top: 15px;">
+					<label th:for="newExpressNo">新快递单号: </label>
+					<input type="text" id="newExpressNo" placeholder="新快递单号">
+				</div>
+			</form>
+		</div>
+	</script>
+	<script th:src="@{/js/datatimeTool.js}"></script>
+	<script th:src="@{/ruoyi/js/currency.js}"></script>
+	<th:block th:include="include :: footer" />
+    <script th:inline="javascript">
+		var editFlag = [[${@permission.hasPermi('platform:order:edit')}]];
+        var prefix = ctx + "business/vendorOrder";
+        var orderDetailStatusDatas = [[${@dict.getType('order_detail_status')}]];
+		var orderDeliveryStatusDatas = [[${@dict.getType('order_delivery_status')}]];
+
+		var dateFrom = DateAdd("m ", -1, new Date());
+		var dateTo = new Date();
+		$("#orderTimeFrom").val(dateFrom.Format("yyyy-MM-dd"));
+		$("#orderTimeTo").val(dateTo.Format("yyyy-MM-dd"));
+
+		$(function() {
+			var options = {
+				url: prefix + "/list",
+				createUrl: prefix + "/add",
+				updateUrl: prefix + "/edit/{id}",
+				removeUrl: prefix + "/remove",
+				exportUrl: prefix + "/export",
+				modalName: "订单明细选择",
+				showSearch: false,
+				showColumns: false,
+				pageSize: 25,
+				onUncheck: onUncheck,
+				onUncheckAll: onUncheckAll,
+				columns: [
+					{
+						checkbox: true
+					},
+					{
+						field : 'orderNo',
+						title : '订单编号',
+						visible: false
+					},
+					{
+						field : 'orderNo',
+						title : '订单编号',
+						sortable: false
+					},
+					{
+						field : 'orderDetailStatus',
+						title : '订单状态',
+						sortable: false,
+						formatter: function(value, row, index) {
+							return $.table.selectDictLabel(orderDetailStatusDatas, value);
+						}
+					},
+					{
+						field : 'orderDeliveryStatus',
+						title : '订单发货状态',
+						sortable: false,
+						formatter: function(value, row, index) {
+							return $.table.selectDictLabel(orderDeliveryStatusDatas, value);
+						}
+					},
+					{
+						field : 'prodName',
+						title : '商品名称',
+						sortable: false
+					},
+					{
+						field : 'prodAttrName',
+						title : '属性名称',
+						sortable: false
+					},
+					{
+						field : 'payAmount',
+						title : '支付金额',
+						sortable: false,
+						align : "right",
+						formatter: function(value, row, index) {
+							return formatCurrency(value / 100, 2);
+						}
+					},
+					{
+						field : 'quantity',
+						title : '商品数量',
+						sortable: false,
+						align : "right"
+					},
+					{
+						field : 'recName',
+						title : '收件人姓名',
+						sortable: false
+					},
+					{
+						field : 'recMobile',
+						title : '收件人手机',
+						sortable: false
+					},
+					{
+						field : 'orderTime',
+						title : '下单时间',
+						sortable: false
+					},
+					{
+						field : 'deliveryTime',
+						title : '发货时间',
+						sortable: false
+					},
+					{
+						field : 'confirmTime',
+						title : '确认收货时间',
+						sortable: false
+					},
+					{
+						field : 'cancelTime',
+						title : '取消时间',
+						sortable: false
+					},
+					{
+						title: '操作',
+						align: 'left',
+						formatter: function(value, row, index) {
+							var actions = [];
+							actions.push('<a class="btn btn-info btn-xs" href="javascript:void(0)" onclick="$.modal.openTab(\'订单详情\', \'' + prefix + '/detail/' + row.orderId + '\')"><i class="fa fa-edit"></i>查看</a> ');
+							if (row.orderDeliveryStatus === 'PENDING') {
+								actions.push('<a class="btn btn-success btn-xs" href="javascript:void(0)" onclick="deliverProd(\'' + row.orderDetailId + '\', \'' + row.orderDeliveryId + '\')"><i class="fa fa-edit"></i>发货</a> ');
+							}
+							if (row.orderDeliveryStatus === 'DELIVERED') {
+								actions.push('<a class="btn btn-warning btn-xs" href="javascript:void(0)" onclick="cancelDeliverProd(\'' + row.orderDetailId + '\', \'' + row.orderDeliveryId + '\')"><i class="fa fa-edit"></i>取消发货</a> ');
+								actions.push('<a class="btn btn-success btn-xs" href="javascript:void(0)" onclick="changeExpressNo(\'' + row.orderDetailId + '\', \'' + row.orderDeliveryId + '\')"><i class="fa fa-edit"></i>更换单号</a> ');
+								actions.push('<a class="btn btn-primary btn-xs" href="javascript:void(0)" onclick="showExpressNo(\'' + row.orderDetailId + '\', \'' + row.orderDeliveryId + '\')"><i class="fa fa-edit"></i>显示快递单号</a> ');
+							}
+							return actions.join('');
+						}
+					}
+				]
+			};
+			$.table.init(options);
+		});
+
+		function printPickForm() {
+			var confirmMsg = "确认打印拣货单吗?";
+
+			$.modal.confirm(confirmMsg, function() {
+				var exportUrl = prefix + "/export";
+				var data = {
+					"detailIds" : $.table.selectColumns("id").join()
+				};
+				// $.post(exportUrl, data, function(result) {
+				// 	if (result.code === web_status.SUCCESS) {
+				// 		window.location.href = ctx + "common/download?fileName=" + encodeURI(result.msg) + "&delete=" + true;
+				// 	} else if (result.code === web_status.WARNING) {
+				// 		$.modal.alertWarning(result.msg)
+				// 	} else {
+				// 		$.modal.alertError(result.msg);
+				// 	}
+				// 	$.modal.closeLoading();
+				// });
+			})
+		}
+
+
+		function onUncheck() {
+
+		}
+		function onUncheckAll() {
+		}
+
+		function deliverProd(orderDetailId, orderDeliveryId) {
+			var content = $('#divInputExpressNo').html();
+			layer.open({
+				type: 1,
+				fix: false,
+				maxmin: false,
+				shade: 0.3,
+				area: ['340px', '215px'],
+				title: '输入快递单号',
+				// 弹层外区域关闭
+				shadeClose: true,
+				content: content, //捕获的元素,注意:最好该指定的元素要存放在body最外层,否则可能被其它的相对元素所影响
+				btn: ['<i class="fa fa-check"></i> 确定', '<i class="fa fa-remove"></i> 关闭'],
+				btn1: function() {
+					var expressNo = $("#expressNo").val();
+					if (expressNo === "") {
+						$.modal.alertError("请输入快递单号");
+						return;
+					}
+					var url = prefix + "/deliverProd";
+					var data = {
+						"orderDetailId": orderDetailId,
+						"orderDeliveryId": orderDeliveryId,
+						"expressNo": expressNo
+					};
+					$.post(url, data, function(result) {
+						if (result.code === web_status.SUCCESS) {
+							$.modal.closeAll();
+							$.modal.enable();
+							$.modal.alertSuccess(result.msg);
+							$.table.search();
+						} else if (result.code === web_status.WARNING) {
+							$.modal.closeAll();
+							$.modal.enable();
+							$.modal.alertWarning(result.msg)
+						} else {
+							$.modal.closeAll();
+							$.modal.enable();
+							$.modal.alertError(result.msg);
+						}
+					});
+					layer.closeAll();
+				}
+			});
+		}
+
+		function cancelDeliverProd(orderDetailId, orderDeliveryId) {
+			var url = prefix + "/cancelDeliverProd";
+			var data = {
+				"orderDetailId": orderDetailId,
+				"orderDeliveryId": orderDeliveryId,
+			};
+			$.post(url, data, function(result) {
+				if (result.code === web_status.SUCCESS) {
+					$.modal.closeAll();
+					$.modal.alertSuccess(result.msg);
+					$.table.search();
+				} else if (result.code === web_status.WARNING) {
+					$.modal.closeAll();
+					$.modal.enable();
+					$.modal.alertWarning(result.msg)
+				} else {
+					$.modal.closeAll();
+					$.modal.enable();
+					$.modal.alertError(result.msg);
+				}
+			});
+		}
+
+		function changeExpressNo(orderDetailId, orderDeliveryId) {
+			var content = $('#divChangeExpressNo').html();
+			layer.open({
+				type: 1,
+				fix: false,
+				maxmin: false,
+				shade: 0.3,
+				area: ['340px', '215px'],
+				title: '更换单号',
+				// 弹层外区域关闭
+				shadeClose: true,
+				content: content, //捕获的元素,注意:最好该指定的元素要存放在body最外层,否则可能被其它的相对元素所影响
+				btn: ['<i class="fa fa-check"></i> 确定', '<i class="fa fa-remove"></i> 关闭'],
+				btn1: function() {
+					var newExpressNo = $("#newExpressNo").val();
+					if (newExpressNo === "") {
+						$.modal.alertError("请输入新单号");
+						return;
+					}
+					var data = {};
+					var url = prefix + "/changeExpressNo";
+
+					data = {
+						"orderDetailId": orderDetailId,
+						"orderDeliveryId": orderDeliveryId,
+						"expressNo": newExpressNo
+					};
+					$.post(url, data, function(result) {
+						if (result.code === web_status.SUCCESS) {
+							$.modal.closeAll();
+							$.modal.alertSuccess("更新单号成功。");
+							$.table.search();
+						} else if (result.code === web_status.WARNING) {
+							$.modal.enable();
+							$.modal.alertWarning(result.msg);
+						} else {
+							$.modal.enable();
+							$.modal.alertError(result.msg);
+						}
+					});
+					layer.closeAll();
+				}
+			});
+		}
+
+		function showExpressNo(orderDeliveryId) {
+			$.modal.open('显示快递单号', prefix + '/showExpress/' + orderDeliveryId);
+		}
+    </script>
+</body>
+</html>

+ 138 - 0
08.src/Xingxi/xingxi-admin/src/main/resources/templates/business/vendorOrder/vendorOrderDetail.html

@@ -0,0 +1,138 @@
+<!DOCTYPE html>
+<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
+<head>
+	<th:block th:include="include :: header('订单详细')" />
+</head>
+<body class="white-bg">
+    <div class="wrapper wrapper-content animated fadeInRight ibox-content " >
+        <form class="form-horizontal" id="form-order-detail" th:object="${orderVo}">
+            <input id="orderId" name="orderId" th:field="*{orderId}"  type="hidden">
+			<div class="form-group">
+				<label class="col-sm-3 control-label">订单编号:</label>
+				<div class="col-sm-3">
+					<p class="form-control-static" th:text="*{orderNo}"></p>
+				</div>
+				<label class="col-sm-3 control-label">订单时间:</label>
+				<div class="col-sm-3">
+					<p class="form-control-static" th:text="${#dates.format(orderVo.orderTime, 'yyyy-MM-dd HH:mm:ss')}"></p>
+				</div>
+			</div>
+			<div class="form-group">
+				<label class="col-sm-3 control-label">店铺名称:</label>
+				<div class="col-sm-3">
+					<p class="form-control-static"  th:text="*{sellerName}"></p>
+				</div>
+				<label class="col-sm-3 control-label">店铺联系方式:</label>
+				<div class="col-sm-3">
+					<p class="form-control-static"  th:text="*{sellerMobile}"></p>
+				</div>
+			</div>
+			<div class="form-group">
+				<label class="col-sm-3 control-label">收件人名称:</label>
+				<div class="col-sm-3">
+					<p class="form-control-static"  th:text="*{recName}"></p>
+				</div>
+				<label class="col-sm-3 control-label">收件人手机:</label>
+				<div class="col-sm-3">
+					<p class="form-control-static"  th:text="*{recMobile}"></p>
+				</div>
+			</div>
+			<div class="form-group">
+				<label class="col-sm-3 control-label">收件人地址:</label>
+				<div class="col-sm-9">
+					<label class="control-label" th:text="*{recProv}"></label>
+					<label class="control-label" th:text="*{recCity}"></label>
+					<label class="control-label" th:text="*{recDistrict}"></label>
+					<label class="control-label" th:text="*{recAddress}"></label>
+				</div>
+			</div>
+			<div class="form-group">
+				<label class="col-sm-3 control-label">订单状态:</label>
+				<div class="col-sm-3" th:with="type=${@dict.getType('order_status')}">
+					<p class="form-control-static" th:each="dict : ${type}" th:if="${orderVo.orderStatus == dict.dictValue}"  th:text="${dict.dictLabel}"></p>
+				</div>
+			</div>
+			<div class="col-sm-12 select-table table-striped">
+				<table id="bootstrap-table" data-mobile-responsive="true"></table>
+			</div>
+		</form>
+    </div>
+    <div th:include="include::footer"></div>
+	<script th:src="@{/ruoyi/js/currency.js}"></script>
+	<script th:inline="javascript">
+		$(function() {
+			var datas = [[${@dict.getType('order_detail_status')}]];
+			var options = {
+				url: ctx + "business/orderDetail/list",
+				modalName: "订单",
+				showSearch: false,
+				showPageGo: false,
+				showRefresh: false,
+				showColumns: false,
+				showToggle: false,
+				columns: [
+					{
+						field : 'className',
+						title : '商品分类',
+						sortable: false
+					},
+					{
+						field : 'prodName',
+						title : '商品名称',
+						sortable: false
+					},
+					{
+						field : 'prodAttrName',
+						title : '商品属性',
+						sortable: false
+					},
+					{
+						field : 'quantity',
+						title : '订单数量',
+						align : "right"
+					},
+					{
+						field : 'price',
+						title : '单价(元)',
+						align : "right",
+						formatter: function(value, row, index) {
+							return formatCurrency(value / 100, 2);
+						}
+					},
+					{
+						field : 'orderAmount',
+						title : '订单金额',
+						align : "right",
+						formatter: function(value, row, index) {
+							return formatCurrency(value / 100, 2);
+						}
+					},
+					{
+						field : 'confirmTime',
+						title : '确认收货时间',
+						align : "center"
+					},
+					{
+						field : 'refundCount',
+						title : '已退货数量',
+						align : "right",
+						formatter: function(value, row, index) {
+							return formatPoint(value);
+						}
+					},
+					{
+						field : 'orderDetailStatus',
+						title : '状态',
+						sortable: false,
+						formatter: function(value, row, index) {
+							return $.table.selectDictLabel(datas, value);
+						}
+					}
+				]
+			};
+			$.table.init(options);
+		});
+		$("select").attr('disabled',true);
+	</script>
+</body>
+</html>

+ 8 - 0
08.src/Xingxi/xingxi-admin/src/main/resources/templates/master/merchant/prod/merchantProd.html

@@ -55,6 +55,7 @@
         </div>
     </div>
     <th:block th:include="include :: footer" />
+    <script th:src="@{/ruoyi/js/currency.js}"></script>
     <script th:inline="javascript">
         var prefix = ctx + "master/merchant/prod";
         var removeFlag = [[${@permission.hasPermi('master:merchant:prod:remove')}]];
@@ -94,6 +95,13 @@
                         title: '上架时间'
                     },
                     {
+                        field: 'price',
+                        title: '单价',
+                        formatter: function (value, row, index) {
+                            return formatCurrency(value / 100, 2);
+                        }
+                    },
+                    {
                         title: '操作',
                         align: 'center',
                         formatter: function(value, row, index) {

+ 10 - 1
08.src/Xingxi/xingxi-admin/src/main/resources/templates/master/product/prodAttrPrice/prodAttrPrice.html

@@ -43,7 +43,7 @@
                         <ul>
                             <li>
                                 <label>单价:</label>
-                                <input name="price" class="form-control col-sm-1" type="text" th:field="*{price}">
+                                <input id="price" name="price" class="form-control col-sm-1" type="text" th:field="*{price}">
                             </li>
                             <li>
                             </li>
@@ -54,9 +54,18 @@
         </form>
     </div>
     <th:block th:include="include :: footer" />
+    <script th:src="@{/ruoyi/js/currency.js}"></script>
     <script th:inline="javascript">
         var prefix = ctx + "master/product/prodAttrPrice";
 
+        $(function() {
+            $("#price").val(formatCurrency($("#price").val(), 2));
+        });
+
+        $("#price").blur(function(){
+            $(this).val(formatCurrency($(this).val(), 2));
+        });
+
         $("#form-prodAttrPrice-edit").validate({
             rules: {
                 buyerName: {

+ 32 - 0
08.src/Xingxi/xingxi-common/src/main/java/com/xingxi/common/enums/EOrderDeliveryStatus.java

@@ -0,0 +1,32 @@
+package com.xingxi.common.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @program: xingxi
+ * @description: 审核状态
+ * @author: bao
+ * @create: 2025-04-21
+ */
+@AllArgsConstructor
+@Getter
+public enum EOrderDeliveryStatus {
+    PENDING("PENDING", "未发货"),
+    PARTDELIVERED("PARTDELIVERED", "部分发货"),
+    DELIVERED("DELIVERED", "已发货"),
+    RECEIVED("RECEIVED", "已收货");
+
+    private String val;
+    private String desc;
+
+    /** 解析 */
+    public static EOrderDeliveryStatus parseByVal(String val) {
+        for(EOrderDeliveryStatus type : EOrderDeliveryStatus.values()) {
+            if(type.getVal().equalsIgnoreCase(val)) {
+                return type;
+            }
+        }
+        return EOrderDeliveryStatus.PENDING;
+    }
+}