Browse Source

订单列表

chao 3 years ago
parent
commit
cba956c567

+ 30 - 3
src/main/java/com/caimei365/order/controller/OrderClubApi.java

@@ -2,13 +2,16 @@ package com.caimei365.order.controller;
 
 import com.caimei365.order.model.ResponseJson;
 import com.caimei365.order.model.dto.OrderDto;
+import com.caimei365.order.model.vo.AddressVo;
+import com.caimei365.order.model.vo.OrderVo;
 import com.caimei365.order.service.OrderClubService;
+import com.github.pagehelper.PageInfo;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import lombok.RequiredArgsConstructor;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 /**
  * 机构订单API
@@ -25,6 +28,30 @@ public class OrderClubApi {
     private final OrderClubService orderClubService;
     private final String ID_EMPTY = "订单Id不能为空!";
 
+    /**
+     * 机构订单列表
+     */
+    @ApiOperation("机构订单列表(旧:/order/list)")
+    @ApiImplicitParams({
+            @ApiImplicitParam(required = true, name = "userId", value = "用户Id"),
+            @ApiImplicitParam(required = false, name = "orderState", value = "1:待确认,2:待付款,3:待发货,4:已发货,5:退货款"),
+            @ApiImplicitParam(required = false, name = "orderNo", value = "订单编号"),
+            @ApiImplicitParam(required = false, name = "beginTime", value = "开始时间"),
+            @ApiImplicitParam(required = false, name = "endTime", value = "截止时间"),
+            @ApiImplicitParam(required = false, name = "pageNum", value = "页码"),
+            @ApiImplicitParam(required = false, name = "pageSize", value = "每页数量")
+    })
+    @GetMapping("/list")
+    public ResponseJson<PageInfo<OrderVo>> getOrderList(Integer userId, Integer orderState, String orderNo, String beginTime, String endTime,
+                                                        @RequestParam(value = "pageNum", defaultValue = "1") int pageNum,
+                                                        @RequestParam(value = "pageSize", defaultValue = "10") int pageSize) {
+        if (null == userId) {
+            return ResponseJson.error("用户Id不能为空!", null);
+        }
+        return orderClubService.getOrderList(userId, orderState, orderNo, beginTime, endTime, pageNum, pageSize);
+    }
+
+
     /**
      * 机构确认订单
      *

+ 50 - 0
src/main/java/com/caimei365/order/mapper/OrderClubMapper.java

@@ -3,6 +3,7 @@ package com.caimei365.order.mapper;
 import com.caimei365.order.model.po.BalanceRecordPo;
 import com.caimei365.order.model.po.OrderPo;
 import com.caimei365.order.model.po.OrderProductPo;
+import com.caimei365.order.model.vo.*;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -101,4 +102,53 @@ public interface OrderClubMapper {
      * @param orderId 订单Id
      */
     void updateLogisticsBatch(Integer orderId);
+    /**
+     * 机构订单列表
+     * @param userId     用户Id
+     * @param orderState 1:待确认,2:待付款,3:待发货,4:已发货,5:退货款
+     * @param orderNo    订单编号
+     * @param beginTime  开始时间
+     * @param endTime    截止时间
+     */
+    List<OrderVo> getOrderList(Integer userId, Integer orderState, String orderNo, String beginTime, String endTime);
+    /**
+     * 查询订单发货次数
+     * @param orderId 订单Id
+     */
+    int countLogisticsBatch(Integer orderId);
+    /**
+     * 根据子订单Id查询子订单列表
+     * @param shopOrderIds 子订单Ids
+     */
+    List<ShopOrderVo> getShopOrderList(@Param("shopOrderIds") List<String> shopOrderIds);
+    /**
+     * 根据Id获取订单促销
+     * @param orderPromotionsId 订单促销Id
+     */
+    PromotionsVo getOrderPromotionsById(Integer orderPromotionsId);
+    /**
+     * 获取子订单订单商品
+     * @param shopOrderId 子订单Id
+     */
+    List<OrderProductVo> getShopOrderProduct(Integer shopOrderId);
+    /**
+     * 支付记录(收款记录)
+     * @param orderId 订单Id
+     */
+    List<DiscernReceiptVo> getDiscernReceipt(Integer orderId);
+    /**
+     * 获取返佣款
+     * @param shopOrderId 子订单Id
+     */
+    Double getRebateAmountByShopOrder(Integer shopOrderId);
+    /**
+     * 是否可以走线上支付
+     * @param orderId 订单Id
+     */
+    int countOfflinePayment(Integer orderId);
+    /**
+     * 付供应商费用列表
+     * @param orderId 订单Id
+     */
+    List<Double> getShouldPayShopAmountList(Integer orderId);
 }

+ 51 - 0
src/main/java/com/caimei365/order/model/enums/ReceivablesType.java

@@ -0,0 +1,51 @@
+package com.caimei365.order.model.enums;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2021/7/21
+ */
+public enum ReceivablesType {
+    /**
+     * 枚举值定义
+     */
+    JIANSHE(1, "建设银行-7297"),
+    GUANGFA(2, "广发银行-0115"),
+    ZHONGXING_1(3, "中信银行-7172"),
+    ZHONGXING_2(4, "中信银行-0897"),
+    ZHONGXING_2_1(5, "中信银行-0897-财付通"),
+    ZHONGXING_2_2(6, "中信银行-0897-支付宝"),
+    XIANSHANG_ZFB(7, "线上-支付宝"),
+    XIANSHANG_WX(8, "线上-微信支付"),
+    XIANSHANG_KUAIQIAN(9, "线上-快钱支付"),
+    KOUTOUFANYONG(10, "口头返佣"),
+    GUANGFA_1(11, "广发银行-5461"),
+    WANGYIN(12, "企业网银"),
+    PCWX(13, "微信支付"),
+    ZHIFUBAO(14, "支付宝"),
+    MINIWX(15, "微信支付"),
+    YUEDIKO(16, "余额抵扣");
+
+    private final int code;
+    private final String desc;
+
+    ReceivablesType(int code, String desc) {
+        this.code = code;
+        this.desc = desc;
+    }
+
+    /**
+     * 根据code获取枚举值
+     * @param code code
+     * @return desc
+     */
+    public static String getReceivablesType(int code) {
+        for (ReceivablesType type : ReceivablesType.values()) {
+            if (type.code == code) {
+                return type.desc;
+            }
+        }
+        return "";
+    }
+}

+ 72 - 0
src/main/java/com/caimei365/order/model/vo/DiscernReceiptVo.java

@@ -0,0 +1,72 @@
+package com.caimei365.order.model.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2021/7/21
+ */
+@Data
+public class DiscernReceiptVo implements Serializable {
+    private static final long serialVersionUID = 1L;
+    /**
+     * 款项识别表id
+     */
+    private Integer id;
+    /**
+     * 用户付款方式:1线上,2线下,3余额抵扣
+     */
+    private Integer payWay;
+    /**
+     * 付款类型:1建设银行7297、2广发银行0115、3中信银行7172、4中信银行0897、5中信银行0897-财付通、6中信银行0897-支付宝、7线上-支付宝、8线上-微信支付、9线上-快钱支付、10口头返佣、11广发银行5461、12PC-B2B网银、13PC-微信支付、14PC-支付宝、15小程序-微信支付、16余额抵扣、17PC-B2C网银
+     */
+    private Integer payType;
+    /**
+     * 付款类型描述
+     */
+    private String payTypeStr;
+    /**
+     * 收款款项类型:1订单款,2非订单款,3返佣款
+     */
+    private Integer receiptType;
+    /**
+     * 收款状态:1待确认、2已确认(待审核)、3审核通过、4审核未通过、5收款撤销【订单款项状态:12345】【非订单款项状态:125】【返佣款状态:125】【线上支付成功为审核通过】
+     */
+    private Integer receiptStatus;
+    /**
+     * 收款金额(线上一次性付款和支付金额一致)
+     */
+    private Double receiptAmount;
+    /**
+     * 确认订单类型:1小额抹平确认,2大额抹平确认,3大额退款余额,4确认关联
+     */
+    private Integer confirmType;
+    /**
+     * 收款时间
+     */
+    private String receiptDate;
+    /**
+     * 确认时间
+     */
+    private String confirmDate;
+    /**
+     * 审核时间
+     */
+    private String reviewDate;
+    /**
+     * 更新操作时间
+     */
+    private String updateDate;
+    /**
+     * 作废标记 0 否,其余是
+     */
+    private Integer delFlag;
+    /**
+     * 单次收款金额
+     */
+    private Double associateAmount;
+}

+ 209 - 0
src/main/java/com/caimei365/order/model/vo/OrderProductVo.java

@@ -0,0 +1,209 @@
+package com.caimei365.order.model.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2021/7/21
+ */
+@Data
+public class OrderProductVo implements Serializable {
+    private static final long serialVersionUID = 1L;
+    /**
+     * 商品Id
+     */
+    private Integer productId;
+    /**
+     * 供应商Id
+     */
+    private Integer shopId;
+    /**
+     * 商品名称
+     */
+    private String name;
+    /**
+     * 主图
+     */
+    private String image;
+    /**
+     * 价格
+     */
+    private Double price;
+    /**
+     * 供应商名称
+     */
+    private String shopName;
+    /**
+     * 商品的类别:1正常商品(默认),2二手商品
+     */
+    private Integer productCategory;
+    /**
+     * 成本价选中标志:1固定成本 2比例成
+     */
+    private Integer costCheckFlag;
+    /**
+     * 成本价
+     */
+    private Double costPrice;
+    /**
+     * 市场价 = 商品表市场价
+     */
+    private Double normalPrice;
+    /**
+     * 比例成本百分比
+     */
+    private Double costProportional;
+    /**
+     * 启用阶梯价标志 0否 1是
+     */
+    private Integer ladderPriceFlag;
+    /**
+     * 折后单价
+     */
+    private Double discountPrice;
+    /**
+     * 折扣比例
+     */
+    private Double discount;
+    /**
+     * 总价  = price X num
+     */
+    private Double totalAmount;
+    /**
+     * 折后总价  = discountPrice X num + totalAddedValueTax
+     */
+    private Double totalFee;
+    /**
+     * 应付金额 = totalFee - discountFee(经理折扣,仅后台下单有经理折扣)
+     */
+    private Double shouldPayFee;
+    /**
+     * 包装规格
+     */
+    private String productUnit;
+    /**
+     * 购买数量
+     */
+    private Integer num;
+    /**
+     * 赠送数量
+     */
+    private Integer presentNum;
+    /**
+     * 协销订单:经理折扣(平摊到每个商品上,按照每种商品的总价占订单总价的比例来均分);普通订单 无
+     */
+    private Double discountFee;
+    /**
+     * 是否含税 0不含税,1含税,2未知
+     */
+    private Integer includedTax;
+    /**
+     * 发票类型(基于是否含税基础) 1增值税票,2普通票, 3不能开票
+     */
+    private Integer invoiceType;
+    /**
+     * 机构 税率
+     */
+    private Double taxRate;
+    /**
+     * 机构 单个税费=税率X折后单价
+     */
+    private Double addedValueTax;
+    /**
+     * 机构 总税费=单个税费X购买数量
+     */
+    private Double totalAddedValueTax;
+    /**
+     * 供应商 税率
+     */
+    private Double shopTaxRate;
+    /**
+     * 供应商 单个付供应商税费=税率X成本
+     */
+    private Double singleShouldPayTotalTax;
+    /**
+     * 供应商 总税费(应付税费)=单个税费X购买数量
+     */
+    private Double shouldPayTotalTax;
+    /**
+     * 供应商 商品费=成本价*(购买数量  + 赠品数量)
+     */
+    private Double shopProductAmount;
+    /**
+     * 后台设置的单个应付供应商金额
+     */
+    private Double singleShopFee;
+    /**
+     * 该商品总的应付供应商金额
+     */
+    private Double shopFee;
+    /**
+     * 后台设置单个应付第三方金额
+     */
+    private Double singleOtherFee;
+    /**
+     * 该商品总的应付第三方金额
+     */
+    private Double otherFee;
+    /**
+     * 后台计算的单个应付采美金额
+     */
+    private Double singleCmFee;
+    /**
+     * 该商品总的应付采美金额 (受赠品影响)
+     */
+    private Double cmFee;
+    /**
+     * 支付状态 0 未进账 1 待财务审核 2 已进账(适用协销的单笔线下进账和自助订单线下或异常进账)
+     */
+    private Integer payStatus;
+    /**
+     * 订单商品再次购买标识 0否 1是
+     */
+    private Integer buyAgainFlag;
+    /**
+     * 未出库数量
+     */
+    private Integer notOutStore;
+    /**
+     * 下单时商品购买价格类型快照 0 机构价,1活动价 ,2阶梯价
+     */
+    private Integer actProduct;
+//    /**
+//     * 阶梯价列表(临时用,保存订单阶梯价格)
+//     */
+//    private List<LadderPriceVo> ladderPrices;
+    /**
+     * 订单号(保存订单用)
+     */
+    private Integer orderId;
+    /**
+     * 订单编号(保存订单用)
+     */
+    private String orderNo;
+    /**
+     * 子订单ID(保存订单用)
+     */
+    private Integer shopOrderId;
+    /**
+     * 子订单编号(保存订单用)
+     */
+    private String shopOrderNo;
+    /**
+     * 订单商品Id(保存订单用)
+     */
+    private Integer orderProductId;
+    /**
+     * 订单促销id
+     */
+    private Integer orderPromotionsId;
+    /**
+     * 商品促销活动
+     */
+    private PromotionsVo productPromotion;
+}

+ 219 - 0
src/main/java/com/caimei365/order/model/vo/OrderVo.java

@@ -0,0 +1,219 @@
+package com.caimei365.order.model.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2021/7/20
+ */
+@Data
+public class OrderVo implements Serializable {
+    private static final long serialVersionUID = 1L;
+    /**
+     * 订单号
+     */
+    private Integer orderId;
+    /**
+     * 订单来源:1WWW、2CRM、4客服[适用后台下单]、5外单[适用后台下单]、6小程序[采美,星范]、7呵呵商城小程序、8维沙小程序
+     */
+    private Integer orderSource;
+    /**
+     * 订单编号
+     */
+    private String orderNo;
+    /**
+     * 用户Id
+     */
+    private Integer userId;
+    /**
+     * 机构Id
+     */
+    private Integer clubId;
+    /**
+     * 下单人Id(协销Id,或运营人Id,或用户Id)
+     */
+    private Integer buyUserId;
+    /**
+     * 订单提交时间
+     */
+    private String orderTime;
+    /**
+     * 更新时间
+     */
+    private String updateDate;
+    /**
+     * 订单状态 0 有效  其它无效
+     */
+    private Integer delFlag;
+    /**
+     * 采美豆抵扣运费的抵扣数量
+     */
+    private Integer userBeans;
+    /**
+     * 订单类型 协销订单 0, 普通订单 1
+     */
+    private Integer orderType;
+    /**
+     * 订单提交类型 0:个人自己下单 1:企业自己下单 2:员工帮会所下单 3:协销帮会所下单  4:后台下单 5:采美豆订单
+     */
+    private Integer orderSubmitType;
+    /**
+     * 订单确认标志,0否,1后台确认,2买家确认(适用协销订单并且1或2都算已确认订单,主动订单默认1为确认)
+     */
+    private Integer confirmFlag;
+    /**
+     * 是否能走线上支付 0可以 1不可以 只能线下
+     */
+    private Integer onlinePayFlag;
+    /**
+     * 订单是否可拆分   1可拆分 0不可拆分
+     */
+    private Integer splitFlag;
+    /**
+     * 是否已支付 未支付0 已支付1
+     */
+    private Integer payFlag;
+    /**
+     * (向买家)收款状态:1待收款、2部分收款、3已收款
+     */
+    private Integer receiptStatus;
+    /**
+     * (向供应商)付款状态:1待付款、2部分付款、3已付款
+     */
+    private Integer payStatus;
+    /**
+     * 订单0成本标识:0订单有成本,1订单无成本(订单中所有商品成本为0)
+     */
+    private Integer zeroCostFlag;
+    /**
+     * 发货状态:1待发货、2部分发货、3已发货
+     */
+    private Integer sendOutStatus;
+    /**
+     * 退货退款类型:0未发生退款、1部分退、2全部退
+     */
+    private Integer refundType;
+    /**
+     * 确认付款供应商标识 0未确认,1已确认
+     */
+    private Integer affirmPaymentFlag;
+    /**
+     * 购买总数
+     */
+    private Integer productCount;
+
+    /**
+     * 赠送总数  不计算价格
+     */
+    private Integer presentCount;
+    /**
+     * 促销赠品总数
+     */
+    private Integer promotionalGiftsCount;
+    /**
+     * 是否包含活动商品(受订单未支付自动关闭时间影响)  0 否 1 是
+     */
+    private Integer hasActProduct;
+    /**
+     * 促销满减优惠
+     */
+    private Double promotionFullReduction;
+    /**
+     * 二手商品订单标识  0非二手商品订单、 1二手商品订单
+     */
+    private Integer secondHandOrderFlag;
+    /**
+     * 是否开发票 没开发票 0 开个人发票 1 开企业发票2
+     */
+    private Integer invoiceFlag;
+    /**
+     * 免邮标志  运费:-1到付,0包邮,1需要运费,-2仪器到付其它包邮
+     */
+    private Integer postageFlag;
+    /**
+     * -1到付,0包邮,大于0具体金额,-2仪器到付其它包邮(且运费已使用商品形式存储)
+     */
+    private Double postage;
+    /**
+     * 商品总金额 (商品单价乘以数量,再加上税费)
+     */
+    private Double productTotalFee;
+    /**
+     * 小计金额 (商品折后单价乘以数量,再加上税费)
+     */
+    private Double orderTotalFee;
+    /**
+     * 订单总额(小计金额减去经理折扣后,再加上运费)
+     */
+    private Double payTotalFee;
+    /**
+     * 真实支付金额(订单总额减去抵扣的账户余额)
+     */
+    private Double payableAmount;
+    /**
+     * 余额支付金额
+     */
+    private Double balancePayFee;
+    /**
+     * 0待确认,11待收待发,12待收部发,13待收全发,21部收待发,22部收部发,23部收全发,31已收待发,32已收部发,33已收全发,4交易完成,5订单完成,6已关闭,7交易全退
+     */
+    private Integer status;
+    /**
+     * 订单确认时间
+     */
+    private String confirmTime;
+    /**
+     * 订单支付时间
+     */
+    private String payTime;
+    /**
+     * 返佣订单标识 0非返佣订单,1返佣订单
+     */
+    private Integer rebateFlag;
+    /**
+     * 条款ID
+     */
+    private Integer clauseId;
+    /**
+     * 条款名称
+     */
+    private String clauseName;
+    /**
+     * 子订单ID
+     */
+    private String shopOrderIds;
+    /**
+     * 订单取消原因
+     */
+    private String closeReason;
+    /**
+     * 订单取消时间
+     */
+    private String closeTime;
+    /**
+     * 订单备注
+     */
+    private String note;
+    /**
+     * 子订单信息
+     */
+    private List<ShopOrderVo> shopOrderList;
+    /**
+     * 支付按钮是否消失,true消失
+     */
+    private boolean payButton = false;
+    /**
+     * 待付总金额
+     */
+    private Double pendingPayments;
+    /**
+     * 付款总金额
+     */
+    private Double receiptAmount;
+}

+ 1 - 1
src/main/java/com/caimei365/order/model/vo/PromotionsVo.java

@@ -62,7 +62,7 @@ public class PromotionsVo implements Serializable {
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date beginTime;
     /**
-     * 结束时间
+     * 截止时间
      */
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date endTime;

+ 130 - 0
src/main/java/com/caimei365/order/model/vo/ShopOrderVo.java

@@ -0,0 +1,130 @@
+package com.caimei365.order.model.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2021/7/20
+ */
+@Data
+public class ShopOrderVo implements Serializable {
+    private static final long serialVersionUID = 1L;
+    /**
+     * 子订单ID
+     */
+    private Integer shopOrderId;
+    /**
+     * 子订单编号
+     */
+    private String shopOrderNo;
+    /**
+     * 订单号
+     */
+    private Integer orderId;
+    /**
+     * 订单编号
+     */
+    private String orderNo;
+    /**
+     * 供应商Id
+     */
+    private Integer shopId;
+    /**
+     * 供应商名称
+     */
+    private String shopName;
+    /**
+     * 供应商logo
+     */
+    private String shopLogo;
+    /**
+     * 子订单备注信息
+     */
+    private String note;
+    /**
+     * 用户ID
+     */
+    private Integer userId;
+    /**
+     * 购买机构Id
+     */
+    private Integer clubId;
+    /**
+     * 协销Id
+     */
+    private Integer spId;
+    /**
+     * 订单促销id(店铺促销)
+     */
+    private Integer orderPromotionsId;
+    /**
+     * 促销满减优惠(店铺促销)
+     */
+    private Double promotionFullReduction;
+
+    /**
+     * 佣金 =  应付采美
+     */
+    private Double brokerage;
+    /**
+     * 可退款金额 = 余额抵扣金额
+     */
+    private Double canRefundAmount;
+    /**
+     * 购买数量
+     */
+    private Integer itemCount;
+    /**
+     * 总价 = totalFee
+     */
+    private Double totalAmount;
+    /**
+     * 总金额 = 订单商品totalAmount
+     */
+    private Double productAmount;
+    /**
+     * 需要支付金额 shouldPayFee +运费
+     */
+    private Double needPayAmount;
+    /**
+     * 付供应商 商品费=成本价*(购买数量  + 赠品数量)
+     */
+    private Double shopProductAmount;
+    /**
+     * 付供应商 运费
+     */
+    private Double shopPostFee;
+    /**
+     * 付供应商税费
+     */
+    private Double shopTaxFee;
+    /**
+     * 付供应商 = 商品费 + 运费 + 税费
+     */
+    private Double shouldPayShopAmount;
+    /**
+     * 订单提交时间
+     */
+    private String orderTime;
+    /**
+     * 0:个人自己下单 1:企业自己下单 2:员工帮会所下单 3:协销帮会所下单  4:后台下单 5:采美豆订单
+     */
+    private Integer orderSubmitType;
+    /**
+     * 订单能否拆分 1 为可拆分, 0为不可拆分
+     */
+    private Integer splitFlag;
+    /**
+     * 子订单店铺促销活动
+     */
+    private PromotionsVo shopPromotion;
+    /**
+     * 订单商品信息
+     */
+    private List<OrderProductVo> orderProductList;
+}

+ 21 - 1
src/main/java/com/caimei365/order/service/OrderClubService.java

@@ -1,6 +1,9 @@
 package com.caimei365.order.service;
 
 import com.caimei365.order.model.ResponseJson;
+import com.caimei365.order.model.vo.OrderVo;
+import com.github.pagehelper.PageInfo;
+import io.swagger.annotations.ApiImplicitParam;
 
 /**
  * Description
@@ -9,6 +12,18 @@ import com.caimei365.order.model.ResponseJson;
  * @date : 2021/7/19
  */
 public interface OrderClubService {
+    /**
+     * 机构订单列表
+     * 
+     * @param userId     用户Id
+     * @param orderState 1:待确认,2:待付款,3:待发货,4:已发货,5:退货款
+     * @param orderNo    订单编号
+     * @param beginTime  开始时间
+     * @param endTime    截止时间
+     * @param pageNum    页码
+     * @param pageSize   每页数量
+     */
+    ResponseJson<PageInfo<OrderVo>> getOrderList(Integer userId, Integer orderState, String orderNo, String beginTime, String endTime, int pageNum, int pageSize);
     /**
      * 机构确认订单
      * @param orderId 订单Id
@@ -17,7 +32,7 @@ public interface OrderClubService {
     /**
      * 机构取消订单
      * @param orderId 订单Id
-     * @param note    备注(订单取消原因)
+     * @param remark    备注(订单取消原因)
      */
     ResponseJson<Void> cancelMainOrder(Integer orderId, String remark);
     /**
@@ -30,4 +45,9 @@ public interface OrderClubService {
      * @param orderId 订单Id
      */
     ResponseJson<Void> receiveGoods(Integer orderId);
+
+
+
+
+
 }

+ 146 - 1
src/main/java/com/caimei365/order/service/impl/OrderClubServiceImpl.java

@@ -4,13 +4,19 @@ import com.caimei365.order.components.ProductService;
 import com.caimei365.order.mapper.BaseMapper;
 import com.caimei365.order.mapper.OrderClubMapper;
 import com.caimei365.order.model.ResponseJson;
+import com.caimei365.order.model.enums.ReceivablesType;
 import com.caimei365.order.model.po.BalanceRecordPo;
 import com.caimei365.order.model.po.OrderPo;
 import com.caimei365.order.model.po.OrderProductPo;
 import com.caimei365.order.model.po.UserBeansHistoryPo;
+import com.caimei365.order.model.vo.*;
 import com.caimei365.order.service.MessagePushService;
 import com.caimei365.order.service.OrderClubService;
+import com.caimei365.order.utils.ImageUtil;
 import com.caimei365.order.utils.MathUtil;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.google.common.util.concurrent.AtomicDouble;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Value;
@@ -43,6 +49,145 @@ public class OrderClubServiceImpl implements OrderClubService {
     @Value("${caimei.wwwDomain}")
     private String domain;
 
+    /**
+     * 机构订单列表
+     *
+     * @param userId     用户Id
+     * @param orderState 1:待确认,2:待付款,3:待发货,4:已发货,5:退货款
+     * @param orderNo    订单编号
+     * @param beginTime  开始时间
+     * @param endTime    截止时间
+     * @param pageNum    页码
+     * @param pageSize   每页数量
+     */
+    @Override
+    public ResponseJson<PageInfo<OrderVo>> getOrderList(Integer userId, Integer orderState, String orderNo, String beginTime, String endTime, int pageNum, int pageSize) {
+        // 分页请求数据
+        PageHelper.startPage(pageNum, pageSize);
+        List<OrderVo> orderList = orderClubMapper.getOrderList(userId, orderState, orderNo, beginTime, endTime);
+        for (OrderVo order : orderList) {
+            // 111, 待付待收待发
+            if (11 == order.getStatus() && 1 == order.getPayStatus()) {
+                order.setStatus(111);
+            }
+            // 判断交易全退情况下,是否发过货,77,交易全退可以查看物流
+            int logisticsCount = orderClubMapper.countLogisticsBatch(order.getOrderId());
+            if (7 == order.getStatus() && logisticsCount > 0) {
+                order.setStatus(77);
+            }
+            // 判断二手订单情况下,若部分付款和已付款,排除退货/款的情况,且未确认打款供应商,10,添加确认打款供应商按钮
+            if (1 == order.getSecondHandOrderFlag() && 0 == order.getRefundType() && 0 == order.getAffirmPaymentFlag()) {
+                if (order.getStatus().toString().startsWith("2") || order.getStatus().toString().startsWith("3")) {
+                    // 之前是 “00”
+                    order.setAffirmPaymentFlag(10);
+                }
+            }
+            // 子订单
+            String[] shopOrderIdArr = order.getShopOrderIds().split(",");
+            List<String> shopOrderIds = Arrays.asList(shopOrderIdArr);
+            List<ShopOrderVo> shopOrderList = orderClubMapper.getShopOrderList(shopOrderIds);
+            shopOrderList.forEach(shopOrder -> {
+                // 店铺促销活动
+                PromotionsVo shopPromotion = null;
+                if (null != shopOrder.getOrderPromotionsId() && shopOrder.getOrderPromotionsId() > 0) {
+                    shopPromotion = orderClubMapper.getOrderPromotionsById(shopOrder.getOrderPromotionsId());
+                    shopOrder.setShopPromotion(shopPromotion);
+                }
+                List<OrderProductVo> orderProductList = orderClubMapper.getShopOrderProduct(shopOrder.getShopOrderId());
+                for (OrderProductVo orderProduct : orderProductList) {
+                    boolean taxFlag = (0 == orderProduct.getIncludedTax() && (1 == orderProduct.getInvoiceType() || 2 == orderProduct.getInvoiceType()));
+                    if (taxFlag) {
+                        orderProduct.setPrice(MathUtil.add(orderProduct.getPrice(), orderProduct.getAddedValueTax()).doubleValue());
+                        orderProduct.setDiscountPrice(MathUtil.add(orderProduct.getPrice(), orderProduct.getAddedValueTax()).doubleValue());
+                    }
+                    orderProduct.setImage(ImageUtil.getImageUrl("product", orderProduct.getImage(), domain));
+                    // 查询订单下商品的促销活动
+                    if (null != orderProduct.getOrderPromotionsId() && orderProduct.getOrderPromotionsId() > 0) {
+                        PromotionsVo promotions = orderClubMapper.getOrderPromotionsById(orderProduct.getOrderPromotionsId());
+                        if (null != promotions) {
+                            if (1 == promotions.getType() && 1 == promotions.getMode()) {
+                                promotions.setTouchPrice(MathUtil.add(promotions.getTouchPrice(), MathUtil.div(MathUtil.mul(promotions.getTouchPrice(), orderProduct.getTaxRate()), 100)).doubleValue());
+                            }
+                            orderProduct.setProductPromotion(promotions);
+                        }
+                    }
+                }
+                shopOrder.setOrderProductList(orderProductList);
+                shopOrder.setShopLogo(ImageUtil.getImageUrl("shopLogo", shopOrder.getShopLogo(), domain));
+            });
+            // 过滤运费商品
+            shopOrderList.removeIf(shopOrder -> shopOrder.getShopId() == 998);
+            order.setShopOrderList(shopOrderList);
+            // 设置付款金额
+            getDiscernReceiptAndSetOrder(order);
+        }
+        PageInfo<OrderVo> pageInfo = new PageInfo(orderList);
+        return ResponseJson.success(pageInfo);
+    }
+
+    /**
+     * 设置付款金额
+     * @param order OrderVo
+     */
+    private List<DiscernReceiptVo> getDiscernReceiptAndSetOrder(OrderVo order) {
+        // 支付记录
+        List<DiscernReceiptVo> discernReceiptList = orderClubMapper.getDiscernReceipt(order.getOrderId());
+        Double receiptAmount = 0d;
+        // 订单款
+        if (!discernReceiptList.isEmpty()) {
+            AtomicDouble finalReceiptAmount = new AtomicDouble(0d);
+            discernReceiptList.forEach(discernReceipt -> {
+                finalReceiptAmount.set(MathUtil.add(finalReceiptAmount.get(), discernReceipt.getAssociateAmount()).doubleValue());
+                if (null != discernReceipt.getPayType()) {
+                    discernReceipt.setPayTypeStr(ReceivablesType.getReceivablesType(discernReceipt.getPayType()));
+                }
+            });
+            receiptAmount = finalReceiptAmount.get();
+        } else {
+            //返佣款
+            if (!order.getShopOrderIds().contains(",")) {
+                Double tempAmount = orderClubMapper.getRebateAmountByShopOrder(Integer.parseInt(order.getShopOrderIds()));
+                if (null == tempAmount) {
+                    order.setOnlinePayFlag(0);
+                } else {
+                    order.setOnlinePayFlag(1);
+                    receiptAmount = tempAmount;
+                }
+            }
+        }
+        // 判断是否可以走线上支付
+        int offlineCount = orderClubMapper.countOfflinePayment(order.getOrderId());
+        if (offlineCount > 0) {
+            order.setOnlinePayFlag(1);
+        } else {
+            order.setOnlinePayFlag(0);
+        }
+        //付供应商总金额 + 默认手续费 > 订单总金额
+        Double payTotalFee = order.getPayTotalFee();
+        Double handlingFee = MathUtil.mul(payTotalFee, 0.0038, 2).doubleValue();
+        if (MathUtil.compare(handlingFee, 8) < 0) {
+            handlingFee = 8d;
+        }
+        List<Double> shouldPayShopAmount = orderClubMapper.getShouldPayShopAmountList(order.getOrderId());
+        if (!shouldPayShopAmount.isEmpty()) {
+            AtomicDouble finalHandlingFee = new AtomicDouble(handlingFee);
+            shouldPayShopAmount.forEach(amount -> {
+                finalHandlingFee.set(MathUtil.add(finalHandlingFee.get(), amount).doubleValue());
+            });
+            handlingFee = finalHandlingFee.get();
+        }
+        if (MathUtil.compare(payTotalFee, handlingFee) < 0) {
+            order.setPayButton(true);
+        } else {
+            order.setPayButton(false);
+        }
+        //待付总金额
+        order.setPendingPayments(MathUtil.sub(order.getPayableAmount(), receiptAmount).doubleValue());
+        //支付总金额
+        order.setReceiptAmount(receiptAmount);
+        return discernReceiptList;
+    }
+
     /**
      * 机构确认订单
      *
@@ -124,7 +269,7 @@ public class OrderClubServiceImpl implements OrderClubService {
             double ableUserMoney = baseMapper.getAbleUserMoney(order.getUserId());
             double updateMoney = MathUtil.add(ableUserMoney, order.getBalancePayFee()).doubleValue();
             // 退回用户可用余额
-            orderClubMapper.updateUserMoneyByUserId(updateMoney, order.getUserId());
+            orderClubMapper.updateAbleUserMoneyByUserId(updateMoney, order.getUserId());
             log.info(note + ">>>>>>>>>>>可用余额退回原账户(update[user(ableUserMoney)])userId:" + order.getUserId() + ",orderId:" + orderId);
             // 取消收支记录
             BalanceRecordPo balanceRecord = new BalanceRecordPo();

+ 5 - 5
src/main/java/com/caimei365/order/service/impl/SubmitServiceImpl.java

@@ -536,13 +536,15 @@ public class SubmitServiceImpl implements SubmitService {
                         product.setTaxRate(0d);
                     }
                     // 商品价格
-                    productPrice = MathUtil.add(productPrice, productTax).doubleValue();
+                    product.setPrice(productPrice);
+                    // 商品税后价格
+                    Double productTaxPrice = MathUtil.add(productPrice, productTax).doubleValue();
                     // 折后单价
                     discountPrice = MathUtil.add(discountPrice, discountTax).doubleValue();
                     // 折扣率 = 折后单价/机构价
-                    Double discountRate = MathUtil.mul(MathUtil.div(discountPrice, productPrice), 100).doubleValue();
+                    Double discountRate = MathUtil.mul(MathUtil.div(discountPrice, productTaxPrice), 100).doubleValue();
                     // 单个商品的金额
-                    Double productAmount = MathUtil.mul(productPrice, productNum).doubleValue();
+                    Double productAmount = MathUtil.mul(productTaxPrice, productNum).doubleValue();
                     // 单个商品的折后金额
                     Double productFee = MathUtil.mul(discountPrice, productNum).doubleValue();
                     // 单个商品总税费
@@ -590,8 +592,6 @@ public class SubmitServiceImpl implements SubmitService {
                             product.setOrderPromotionsId(promotions.getId());
                         }
                     }
-                    // 商品价格
-                    product.setPrice(productPrice);
                     // 折后单价
                     product.setDiscountPrice(discountPrice);
                     // 折扣率 = 折后单价/机构价

+ 217 - 1
src/main/resources/mapper/OrderClubMapper.xml

@@ -144,7 +144,7 @@
             cop.shopId,
             cop.name,
             cop.image,
-            cop.price,
+            cop.price1 AS price,
             cop.shopName,
             cop.costPrice,
             cop.normalPrice,
@@ -200,4 +200,220 @@
             #{shopOrderId}
         </foreach>
     </select>
+    <select id="getOrderList" resultType="com.caimei365.order.model.vo.OrderVo">
+        SELECT
+            orderSource,
+            orderNo,
+            userID AS userId,
+            clubID AS clubId,
+            buyUserID AS buyUserId,
+            orderTime,
+            updateDate,
+            delFlag,
+            userBeans,
+            orderType,
+            orderSubmitType,
+            confirmFlag,
+            onlinePayFlag,
+            splitFlag,
+            payFlag,
+            receiptStatus,
+            payStatus,
+            zeroCostFlag,
+            sendOutStatus,
+            refundType,
+            affirmPaymentFlag,
+            productCount,
+            presentCount,
+            promotionalGiftsCount,
+            hasActProduct,
+            promotionFullReduction,
+            secondHandOrderFlag,
+            invoiceFlag,
+            freePostFlag AS postageFlag,
+            freight AS postage,
+            productTotalFee,
+            orderTotalFee,
+            payTotalFee,
+            payableAmount,
+            balancePayFee,
+            status,
+            confirmTime,
+            payTime,
+            rebateFlag,
+            clauseID AS clauseId,
+            clauseName
+        FROM cm_order
+        WHERE delFlag = 0 AND userID = #{userId}
+        <if test="orderState == 1 ">
+            AND status = '0'
+        </if>
+        <if test="orderState == 2 ">
+            AND status IN(11,12,13,21,22,23)
+        </if>
+        <if test="orderState == 3 ">
+            AND status IN(11,12,21,22,31,32)
+        </if>
+        <if test="orderState == 4 ">
+            AND status IN(12,13,22,23,32,33)
+        </if>
+        <if test="orderState == 5 ">
+            AND refundType IN(1,2)
+        </if>
+        <if test="orderNo != null and orderNo != '' ">
+            AND orderNo = #{orderNo}
+        </if>
+        <if test="beginTime != null and beginTime != '' ">
+            AND orderTime <![CDATA[>=]]> #{beginTime}
+        </if>
+        <if test="endTime != null and endTime != '' ">
+            AND orderTime <![CDATA[<=]]> #{endTime}
+        </if>
+        ORDER BY orderTime DESC
+    </select>
+    <select id="countLogisticsBatch" resultType="java.lang.Integer">
+        SELECT COUNT(*) FROM cm_logistics_batch WHERE orderID= #{orderId}
+    </select>
+    <select id="getShopOrderList" resultType="com.caimei365.order.model.vo.ShopOrderVo">
+        SELECT
+            cso.shopOrderNo,
+            cso.orderID AS orderId,
+            cso.orderNo,
+            cso.shopID AS shopId,
+            cso.shopName,
+            cso.note,
+            cso.userID AS userId,
+            cso.clubID AS clubId,
+            cso.spID AS spId,
+            cso.orderPromotionsId,
+            cso.promotionFullReduction,
+            cso.brokerage,
+            cso.canRefundAmount,
+            cso.itemCount,
+            cso.totalAmount,
+            cso.productAmount,
+            cso.needPayAmount,
+            cso.shopProductAmount,
+            cso.shopPostFee,
+            cso.shopTaxFee,
+            cso.shouldPayShopAmount,
+            cso.orderTime,
+            cso.orderSubmitType,
+            cso.splitFlag,
+            s.name AS shopName,
+            s.logo AS shopLogo
+        FROM cm_shop_order cso
+        LEFT JOIN shop s ON cso.shopID = s.shopID
+        WHERE cso.delFlag = 0
+        AND cso.shopOrderID IN
+        <foreach collection="shopOrderIds" open="(" separator="," close=")" item="shopOrderId">
+            #{shopOrderId}
+        </foreach>
+    </select>
+    <select id="getOrderPromotionsById" resultType="com.caimei365.order.model.vo.PromotionsVo">
+        SELECT
+            id,
+            name,
+            description,
+            orderId,
+            type,
+            mode,
+            touchPrice,
+            reducedPrice,
+            beginTime,
+            endTime,
+            status
+        FROM cm_promotions_order
+        WHERE id = #{orderPromotionsId}
+    </select>
+    <select id="getShopOrderProduct" resultType="com.caimei365.order.model.vo.OrderProductVo">
+        SELECT
+            cop.orderID AS orderId,
+            cop.orderNo,
+            cop.shopOrderID AS shopOrderId,
+            cop.shopOrderNo,
+            cop.orderPromotionsId,
+            cop.productId,
+            cop.shopId,
+            cop.name,
+            cop.image,
+            cop.price1 AS price,
+            cop.shopName,
+            cop.costPrice,
+            cop.normalPrice,
+            cop.ladderPriceFlag,
+            cop.discountPrice,
+            cop.discount,
+            cop.totalAmount,
+            cop.totalFee,
+            cop.shouldPayFee,
+            cop.productUnit,
+            cop.num,
+            cop.presentNum,
+            cop.discountFee,
+            cop.includedTax,
+            cop.invoiceType,
+            cop.taxRate,
+            cop.addedValueTax,
+            cop.totalAddedValueTax,
+            cop.singleShouldPayTotalTax,
+            cop.shouldPayTotalTax,
+            cop.shopProductAmount,
+            cop.singleShopFee,
+            cop.shopFee,
+            cop.singleOtherFee,
+            cop.otherFee,
+            cop.singleCmFee,
+            cop.cmFee,
+            cop.payStatus,
+            cop.buyAgainFlag,
+            cop.notOutStore,
+            cop.isActProduct AS actProduct,
+            p.productCategory as productCategory
+        FROM cm_order_product cop
+        LEFT JOIN product p ON cop.productID = p.productID
+        WHERE shopOrderID = #{shopOrderId}
+    </select>
+    <select id="getDiscernReceipt" resultType="com.caimei365.order.model.vo.DiscernReceiptVo">
+        SELECT
+            cdr.payWay,
+            cdr.payType,
+            cdr.receiptType,
+            cdr.receiptStatus,
+            cdr.receiptAmount,
+            cdr.confirmType,
+            cdr.receiptDate,
+            cdr.confirmDate,
+            cdr.reviewDate,
+            cdr.updateDate,
+            cdr.delFlag,
+            cror.associateAmount
+        FROM cm_receipt_order_relation cror
+        LEFT JOIN cm_discern_receipt cdr ON cror.receiptID = cdr.id
+        WHERE cror.orderID = #{orderId}
+        AND cror.relationType = '2' AND cror.delFlag = '0'
+        AND cdr.delFlag = '0' AND cdr.receiptStatus = '3' AND cdr.payType != '16'
+        ORDER BY cdr.receiptDate DESC
+    </select>
+    <select id="getRebateAmountByShopOrder" resultType="java.lang.Double">
+        SELECT
+            receiptAmount
+        FROM cm_receipt_order_relation cror
+        LEFT JOIN cm_discern_receipt cdr ON cror.receiptID = cdr.id
+        WHERE cror.delFlag = '0'
+        AND cror.orderID = #{shopOrderId}
+        AND cror.relationType = 1
+        AND cdr.receiptStatus= '2'
+    </select>
+    <select id="countOfflinePayment" resultType="java.lang.Integer">
+        SELECT count(*)
+        FROM cm_receipt_order_relation cror
+        LEFT JOIN cm_discern_receipt cdr ON cror.receiptID = cdr.id
+        WHERE cror.orderID = #{orderId}
+        AND cror.relationType = '2' AND cror.delFlag = '0'
+        AND cdr.delFlag = '0' AND cdr.receiptStatus IN(2,3) AND cdr.payWay = '2'
+    </select>
+    <select id="getShouldPayShopAmountList" resultType="java.lang.Double">
+        SELECT shouldPayShopAmount FROM cm_shop_order WHERE orderID = #{orderId} AND delFlag = '0'
+    </select>
 </mapper>

+ 2 - 2
src/main/resources/mapper/SubmitMapper.xml

@@ -29,13 +29,13 @@
     </insert>
     <insert id="insertOrderProduct" keyColumn="orderProductID" keyProperty="orderProductId" parameterType="com.caimei365.order.model.po.OrderProductPo" useGeneratedKeys="true">
         INSERT INTO cm_order_product (orderID, orderNo, shopOrderID, shopOrderNo, orderPromotionsId, productId, shopId, name,
-                                    image, price, shopName, costPrice, normalPrice, ladderPriceFlag, discountPrice, discount,
+                                    image, price, price1, shopName, costPrice, normalPrice, ladderPriceFlag, discountPrice, discount,
                                     totalAmount, totalFee, shouldPayFee, productUnit, num, presentNum, discountFee, includedTax,
                                     invoiceType, taxRate, addedValueTax, totalAddedValueTax, singleShouldPayTotalTax, shouldPayTotalTax,
                                     shopProductAmount, singleShopFee, shopFee, singleOtherFee, otherFee, singleCmFee, cmFee,
                                     payStatus, buyAgainFlag, notOutStore, isActProduct)
         VALUES (#{orderId},#{orderNo},#{shopOrderId},#{shopOrderNo},#{orderPromotionsId},#{productId},#{shopId},#{name},
-                #{image},#{price},#{shopName},#{costPrice},#{normalPrice},#{ladderPriceFlag},#{discountPrice},#{discount},
+                #{image},#{price},#{price},#{shopName},#{costPrice},#{normalPrice},#{ladderPriceFlag},#{discountPrice},#{discount},
                 #{totalAmount},#{totalFee},#{shouldPayFee},#{productUnit},#{num},#{presentNum},#{discountFee},#{includedTax},
                 #{invoiceType},#{taxRate},#{addedValueTax},#{totalAddedValueTax},#{singleShouldPayTotalTax},#{shouldPayTotalTax},
                 #{shopProductAmount},#{singleShopFee},#{shopFee},#{singleOtherFee},#{otherFee},#{singleCmFee},#{cmFee},