Kaynağa Gözat

审核收款信息

chao 3 yıl önce
ebeveyn
işleme
594ecff821

+ 43 - 18
src/main/java/com/caimei365/order/controller/ReceiptApi.java

@@ -4,6 +4,7 @@ import com.caimei365.order.model.ResponseJson;
 import com.caimei365.order.model.dto.ReceiptAssociateDto;
 import com.caimei365.order.model.dto.ReceiptAuthDto;
 import com.caimei365.order.model.dto.ReceiptDto;
+import com.caimei365.order.model.dto.ReceiptOperateDto;
 import com.caimei365.order.model.po.ReceiptPo;
 import com.caimei365.order.model.vo.*;
 import com.caimei365.order.service.ReceiptService;
@@ -123,7 +124,7 @@ public class ReceiptApi {
      * 操作收款信息(作废,设为返佣/普通/供应商退款/非订单款)
      * crm:/api/user/receivables/save
      *
-     * @param receiptDto {
+     * @param receiptOperateDto {
      *                   id:收款Id
      *                   receiptType: 1订单款,2非订单款,3返佣款 4订单款或者非订单款(因财务阶段无法区分订单非订单), 5供应商退款
      *                   noOrderReason: 非订单款说明
@@ -132,8 +133,11 @@ public class ReceiptApi {
      */
     @ApiOperation("操作收款信息(作废,设为返佣/普通/供应商退款/非订单款)")
     @PostMapping("/operate")
-    public ResponseJson<ReceiptPo> operateReceipt(ReceiptDto receiptDto, @RequestHeader HttpHeaders headers) {
-        return receiptService.operateReceipt(receiptDto, headers);
+    public ResponseJson<ReceiptPo> operateReceipt(ReceiptOperateDto receiptOperateDto, @RequestHeader HttpHeaders headers) {
+        if (null == receiptOperateDto.getId() || receiptOperateDto.getId() <= 0) {
+            return ResponseJson.error("收款Id不能为空", null);
+        }
+        return receiptService.operateReceipt(receiptOperateDto, headers);
     }
 
     /**
@@ -281,7 +285,7 @@ public class ReceiptApi {
      * 确认收款-关联收款信息
      * crm:/api/user/receivables/confirmReceipt
      *
-     * @param receiptAssociateDto {
+     * @param receiptOperateDto {
      *                            id: 收款Id
      *                            orderIds: 关联订单IDS
      *                            confirmType: 确认订单类型:1小额抹平确认,2大额抹平确认,3大额退款余额,4确认关联
@@ -290,42 +294,42 @@ public class ReceiptApi {
      */
     @ApiOperation("确认收款-关联收款信息")
     @PostMapping("/confirm")
-    public ResponseJson<Void> receiptAssociate(ReceiptAssociateDto receiptAssociateDto, @RequestHeader HttpHeaders headers) {
-        if (null == receiptAssociateDto.getId() || receiptAssociateDto.getId() <= 0) {
+    public ResponseJson<Void> receiptAssociate(ReceiptOperateDto receiptOperateDto, @RequestHeader HttpHeaders headers) {
+        if (null == receiptOperateDto.getId() || receiptOperateDto.getId() <= 0) {
             return ResponseJson.error("收款Id不能为空", null);
         }
-        if (!StringUtils.hasLength(receiptAssociateDto.getOrderIds())) {
+        if (!StringUtils.hasLength(receiptOperateDto.getOrderIds())) {
             return ResponseJson.error("关联订单IDS不能为空", null);
         }
-        return receiptService.receiptAssociate(receiptAssociateDto, headers);
+        return receiptService.receiptAssociate(receiptOperateDto, headers);
     }
 
     /**
      * 确认收款-关联供应商退款
      * crm:/api/user/shop/relation
      *
-     * @param receiptAssociateDto {
+     * @param receiptOperateDto {
      *                            id:          收款Id
      *                            shopOrderId: 关联供应商退款子订单ID
      *                            }
      */
     @ApiOperation("确认收款-关联供应商退款")
     @PostMapping("/confirm/refund")
-    public ResponseJson<ReceiptPo> receiptAssociateRefund(ReceiptAssociateDto receiptAssociateDto, @RequestHeader HttpHeaders headers) {
-        if (null == receiptAssociateDto.getId() || receiptAssociateDto.getId() <= 0) {
+    public ResponseJson<Void> receiptAssociateRefund(ReceiptOperateDto receiptOperateDto, @RequestHeader HttpHeaders headers) {
+        if (null == receiptOperateDto.getId() || receiptOperateDto.getId() <= 0) {
             return ResponseJson.error("收款Id不能为空", null);
         }
-        if (null == receiptAssociateDto.getShopOrderId() || receiptAssociateDto.getShopOrderId() <= 0) {
+        if (null == receiptOperateDto.getShopOrderId() || receiptOperateDto.getShopOrderId() <= 0) {
             return ResponseJson.error("关联供应商退款子订单ID不能为空", null);
         }
-        return receiptService.receiptAssociateRefund(receiptAssociateDto, headers);
+        return receiptService.receiptAssociateRefund(receiptOperateDto, headers);
     }
 
     /**
      * 确认收款-关联返佣款
      * crm:/api/user/rebate/relation
      *
-     * @param receiptAssociateDto {
+     * @param receiptOperateDto {
      *                            id:           收款Id
      *                            shopOrderIds: 关联返佣子订单IDs
      *                            rebateRemarks:关联返佣备注
@@ -333,15 +337,36 @@ public class ReceiptApi {
      */
     @ApiOperation("确认收款-关联返佣款")
     @PostMapping("/confirm/rebate")
-    public ResponseJson<ReceiptPo> receiptAssociateRebate(ReceiptAssociateDto receiptAssociateDto, @RequestHeader HttpHeaders headers) {
-        if (null == receiptAssociateDto.getId() || receiptAssociateDto.getId() <= 0) {
+    public ResponseJson<Void> receiptAssociateRebate(ReceiptOperateDto receiptOperateDto, @RequestHeader HttpHeaders headers) {
+        if (null == receiptOperateDto.getId() || receiptOperateDto.getId() <= 0) {
             return ResponseJson.error("收款Id不能为空", null);
         }
-        if (!StringUtils.hasLength(receiptAssociateDto.getOrderIds())) {
+        if (!StringUtils.hasLength(receiptOperateDto.getOrderIds())) {
             return ResponseJson.error("关联返佣子订单IDs不能为空", null);
         }
-        return receiptService.receiptAssociateRebate(receiptAssociateDto, headers);
+        return receiptService.receiptAssociateRebate(receiptOperateDto, headers);
     }
 
+    /**
+     * 审核收款信息
+     * crm:/api/user/receivables/checkReceipt
+     *
+     * @param receiptOperateDto {
+     *                          id            收款Id
+     *                          receiptStatus 收款状态
+     *                          reviewReason  审核不通过原因
+     * }
+     */
+    @ApiOperation("审核收款信息")
+    @PostMapping("/audit")
+    public ResponseJson<Void> receiptAudit(ReceiptOperateDto receiptOperateDto, @RequestHeader HttpHeaders headers) {
+        if (null == receiptOperateDto.getId() || receiptOperateDto.getId() <= 0) {
+            return ResponseJson.error("收款Id不能为空", null);
+        }
+        if (null == receiptOperateDto.getReceiptStatus() || receiptOperateDto.getReceiptStatus() <= 0) {
+            return ResponseJson.error("收款状态不能为空", null);
+        }
+        return receiptService.receiptAudit(receiptOperateDto.getId(), receiptOperateDto.getReceiptStatus(), receiptOperateDto.getReviewReason(), headers);
+    }
 }
 

+ 8 - 0
src/main/java/com/caimei365/order/mapper/BaseMapper.java

@@ -161,6 +161,14 @@ public interface BaseMapper {
      * @param userId 机构用户Id
      */
     void updateUserBeans(Integer userId, int userBeans);
+    /**
+     * 抵扣后更新用户余额
+     *
+     * @param userMoney     账户余额
+     * @param ableUserMoney 账户实际可用余额
+     * @param userId        机构用户Id
+     */
+    void updateUserMoney(Double userMoney, Double ableUserMoney, Integer userId);
     /**
      * 保存余额到余额收支记录
      */

+ 7 - 2
src/main/java/com/caimei365/order/mapper/ReceiptMapper.java

@@ -1,6 +1,7 @@
 package com.caimei365.order.mapper;
 
 import com.caimei365.order.model.bo.ReceiptParamsBo;
+import com.caimei365.order.model.po.OrderReceiptRelationPo;
 import com.caimei365.order.model.po.ReceiptPo;
 import com.caimei365.order.model.po.RefundShopRecordPo;
 import com.caimei365.order.model.vo.*;
@@ -190,7 +191,11 @@ public interface ReceiptMapper {
      */
     void updateShopOrdePayStatus(String shopOrderId, Integer payStatus);
     /**
-     * 更新订单状态
+     * 收款项和订单关系
      */
-    void updateOrderStatus(OrderVo order);
+    List<OrderReceiptRelationPo> getOrderReceiptRelationList(Integer receiptId);
+    /**
+     * 查询待审核数量
+     */
+    int getPendingtAuditCount(Integer orderId);
 }

+ 0 - 5
src/main/java/com/caimei365/order/model/dto/ReceiptDto.java

@@ -21,11 +21,6 @@ public class ReceiptDto implements Serializable {
      */
     @ApiModelProperty("收款Id")
     private Integer id;
-    /**
-     * 作废标记
-     */
-    @ApiModelProperty("作废标记: 0否,其余是")
-    private Integer delFlag;
     /**
      * 收款短信
      */

+ 73 - 0
src/main/java/com/caimei365/order/model/dto/ReceiptOperateDto.java

@@ -0,0 +1,73 @@
+package com.caimei365.order.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2022/2/25
+ */
+@ApiModel("款项操作")
+@Data
+public class ReceiptOperateDto implements Serializable {
+    private static final long serialVersionUID = 1L;
+    /**
+     * 收款Id
+     */
+    @ApiModelProperty("收款Id")
+    private Integer id;
+    /**
+     * 作废标记
+     */
+    @ApiModelProperty("作废标记: 0否,其余是")
+    private Integer delFlag;
+    /**
+     * 非订单款说明(适用协销确认的时候区分订单和非订单款)
+     */
+    @ApiModelProperty("非订单款说明")
+    private String noOrderReason;
+    /**
+     * 收款款项类型
+     */
+    @ApiModelProperty("收款款项类型:1订单款,2非订单款,3返佣款 4订单款或者非订单款(因财务阶段无法区分订单非订单), 5供应商退款")
+    private Integer receiptType;
+    /**
+     * 收款状态
+     */
+    @ApiModelProperty("收款状态:1待确认、2已确认(待审核)、3审核通过、4审核未通过、5收款撤销【线上支付成功为审核通过】")
+    private Integer receiptStatus;
+    /**
+     * 确认订单类型:1小额抹平确认,2大额抹平确认,3大额退款余额,4确认关联
+     */
+    @ApiModelProperty("确认订单类型:1小额抹平确认,2大额抹平确认,3大额退款余额,4确认关联")
+    private Integer confirmType;
+    /**
+     * 关联订单IDS
+     */
+    @ApiModelProperty("关联订单IDS")
+    private String orderIds;
+    /**
+     * 关联供应商退款子订单ID
+     */
+    @ApiModelProperty("关联供应商退款子订单ID")
+    private Integer shopOrderId;
+    /**
+     * 关联供应商退款子订单ID
+     */
+    @ApiModelProperty("关联返佣子订单IDs")
+    private String shopOrderIds;
+    /**
+     * 返佣关联备注
+     */
+    @ApiModelProperty("关联返佣备注")
+    private String rebateRemarks;
+    /**
+     * 审核不通过原因
+     */
+    private String reviewReason;
+}

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

@@ -38,6 +38,10 @@ public class OrderVo implements Serializable {
      * 机构Id
      */
     private Integer clubId;
+    /**
+     * 组织Id
+     */
+    private Integer organizeId;
     /**
      * 用户身份:1协销 2会员机构 3供应商 4普通机构
      */

+ 5 - 0
src/main/java/com/caimei365/order/model/vo/ReceiptVo.java

@@ -1,5 +1,6 @@
 package com.caimei365.order.model.vo;
 
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -61,6 +62,10 @@ public class ReceiptVo implements Serializable {
      * 短信内容Md5加密串(适用于二次短信匹配查询)
      */
     private String smsMd5Code;
+    /**
+     * 确认订单类型:1小额抹平确认,2大额抹平确认,3大额退款余额,4确认关联
+     */
+    private Integer confirmType;
     /**
      * 是否存在手续费
      */

+ 35 - 26
src/main/java/com/caimei365/order/service/ReceiptService.java

@@ -1,8 +1,8 @@
 package com.caimei365.order.service;
 
 import com.caimei365.order.model.ResponseJson;
-import com.caimei365.order.model.dto.ReceiptAssociateDto;
 import com.caimei365.order.model.dto.ReceiptDto;
+import com.caimei365.order.model.dto.ReceiptOperateDto;
 import com.caimei365.order.model.po.ReceiptPo;
 import com.caimei365.order.model.vo.*;
 import com.github.pagehelper.PageInfo;
@@ -55,14 +55,14 @@ public interface ReceiptService {
     /**
      * 操作收款信息(作废,设为返佣/普通/供应商退款)
      *
-     * @param receiptDto {
-     *                   id:收款Id
-     *                   receiptType: 1订单款,2非订单款,3返佣款 4订单款或者非订单款(因财务阶段无法区分订单非订单), 5供应商退款
-     *                   noOrderReason: 非订单款说明
-     *                   delFlag: 作废标记: 0否,其余是
-     *                   }
+     * @param receiptOperateDto {
+     *                          id:收款Id
+     *                          receiptType: 1订单款,2非订单款,3返佣款 4订单款或者非订单款(因财务阶段无法区分订单非订单), 5供应商退款
+     *                          noOrderReason: 非订单款说明
+     *                          delFlag: 作废标记: 0否,其余是
+     *                          }
      */
-    ResponseJson<ReceiptPo> operateReceipt(ReceiptDto receiptDto, HttpHeaders headers);
+    ResponseJson<ReceiptPo> operateReceipt(ReceiptOperateDto receiptOperateDto, HttpHeaders headers);
 
     /**
      * 获取收款列表
@@ -146,33 +146,42 @@ public interface ReceiptService {
     /**
      * 关联收款信息
      *
-     * @param receiptAssociateDto {
-     *                            id: 收款Id
-     *                            orderIds: 关联订单IDS
-     *                            confirmType: 确认订单类型:1小额抹平确认,2大额抹平确认,3大额退款余额,4确认关联
-     *                            noOrderReason: 非订单款说明
-     *                            }
+     * @param receiptOperateDto {
+     *                          id: 收款Id
+     *                          orderIds: 关联订单IDS
+     *                          confirmType: 确认订单类型:1小额抹平确认,2大额抹平确认,3大额退款余额,4确认关联
+     *                          noOrderReason: 非订单款说明
+     *                          }
      */
-    ResponseJson<Void> receiptAssociate(ReceiptAssociateDto receiptAssociateDto, HttpHeaders headers);
+    ResponseJson<Void> receiptAssociate(ReceiptOperateDto receiptOperateDto, HttpHeaders headers);
 
     /**
      * 确认收款-关联供应商退款
      *
-     * @param receiptAssociateDto {
-     *                            id:          收款Id
-     *                            shopOrderId: 关联供应商退款子订单ID
-     *                            }
+     * @param receiptOperateDto {
+     *                          id:          收款Id
+     *                          shopOrderId: 关联供应商退款子订单ID
+     *                          }
      */
-    ResponseJson<ReceiptPo> receiptAssociateRefund(ReceiptAssociateDto receiptAssociateDto, HttpHeaders headers);
+    ResponseJson<Void> receiptAssociateRefund(ReceiptOperateDto receiptOperateDto, HttpHeaders headers);
 
     /**
      * 确认收款-关联返佣款
      *
-     * @param receiptAssociateDto {
-     *                            id:           收款Id
-     *                            shopOrderIds: 关联返佣子订单IDs
-     *                            rebateRemarks:关联返佣备注
-     *                            }
+     * @param receiptOperateDto {
+     *                          id:           收款Id
+     *                          shopOrderIds: 关联返佣子订单IDs
+     *                          rebateRemarks:关联返佣备注
+     *                          }
      */
-    ResponseJson<ReceiptPo> receiptAssociateRebate(ReceiptAssociateDto receiptAssociateDto, HttpHeaders headers);
+    ResponseJson<Void> receiptAssociateRebate(ReceiptOperateDto receiptOperateDto, HttpHeaders headers);
+
+    /**
+     * 审核收款信息
+     *
+     * @param id            收款Id
+     * @param receiptStatus 收款状态
+     * @param reviewReason  审核不通过原因
+     */
+    ResponseJson<Void> receiptAudit(Integer id, Integer receiptStatus, String reviewReason, HttpHeaders headers);
 }

+ 313 - 37
src/main/java/com/caimei365/order/service/impl/ReceiptServiceImpl.java

@@ -7,8 +7,8 @@ import com.caimei365.order.mapper.PayOrderMapper;
 import com.caimei365.order.mapper.ReceiptMapper;
 import com.caimei365.order.model.ResponseJson;
 import com.caimei365.order.model.bo.ReceiptParamsBo;
-import com.caimei365.order.model.dto.ReceiptAssociateDto;
 import com.caimei365.order.model.dto.ReceiptDto;
+import com.caimei365.order.model.dto.ReceiptOperateDto;
 import com.caimei365.order.model.enums.OrderStatus;
 import com.caimei365.order.model.enums.ReceiptStatus;
 import com.caimei365.order.model.enums.ReceiptType;
@@ -415,7 +415,7 @@ public class ReceiptServiceImpl implements ReceiptService {
     /**
      * 操作收款信息(作废,设为返佣/普通/供应商退款/)
      *
-     * @param receiptDto {
+     * @param receiptOperateDto {
      *                   id:收款Id
      *                   receiptType: 1订单款,2非订单款,3返佣款 4订单款或者非订单款(因财务阶段无法区分订单非订单), 5供应商退款
      *                   noOrderReason: 非订单款说明
@@ -423,39 +423,39 @@ public class ReceiptServiceImpl implements ReceiptService {
      *                   }
      */
     @Override
-    public ResponseJson<ReceiptPo> operateReceipt(ReceiptDto receiptDto, HttpHeaders headers) {
+    public ResponseJson<ReceiptPo> operateReceipt(ReceiptOperateDto receiptOperateDto, HttpHeaders headers) {
         // 检查收款用户权限
         ReceiptUserVo receiptUser = checkPermissions(3, headers);
         if (null == receiptUser) {
             return ResponseJson.error("无权限操作!", null);
         }
-        ReceiptVo receipt = receiptMapper.getReceiptDetail(receiptDto.getId());
+        ReceiptVo receipt = receiptMapper.getReceiptDetail(receiptOperateDto.getId());
         if (null == receipt) {
             return ResponseJson.error("收款数据异常!", null);
         }
         String time = DateUtils.getDateTime();
         ReceiptPo receiptPo = new ReceiptPo();
-        receiptPo.setId(receiptDto.getId());
+        receiptPo.setId(receiptOperateDto.getId());
         receiptPo.setUpdateDate(time);
         // 收款作废
-        if (null != receiptDto.getDelFlag() && receiptDto.getDelFlag() > 0) {
+        if (null != receiptOperateDto.getDelFlag() && receiptOperateDto.getDelFlag() > 0) {
             // 收款状态receiptStatus:2已确认(待审核)、3审核通过
-            if (null != receiptDto.getReceiptStatus() && (2 == receiptDto.getReceiptStatus() || 3 == receiptDto.getReceiptStatus())) {
+            if (null != receipt.getReceiptStatus() && (2 == receipt.getReceiptStatus() || 3 == receipt.getReceiptStatus())) {
                 // 收款款项类型receiptType:1订单款
-                if (null != receiptDto.getReceiptType() && 1 == receiptDto.getReceiptType()) {
+                if (null != receipt.getReceiptType() && 1 == receipt.getReceiptType()) {
                     return ResponseJson.error(-2, "该收款已关联了订单,不能作废!请刷新页面查看最新数据", null);
                 }
                 // 收款款项类型receiptType:3返佣款
-                else if (null != receiptDto.getReceiptType() && 3 == receiptDto.getReceiptType()) {
+                else if (null != receipt.getReceiptType() && 3 == receipt.getReceiptType()) {
                     return ResponseJson.error(-2, "该收款已关联了返佣订单,不能作废!请刷新页面查看最新数据", null);
                 }
             }
-            receiptPo.setDelFlag(receiptDto.getDelFlag());
+            receiptPo.setDelFlag(receiptOperateDto.getDelFlag());
         }
-        receiptPo.setReceiptType(receiptDto.getReceiptType());
+        receiptPo.setReceiptType(receiptOperateDto.getReceiptType());
         // 收款款项类型receiptType:2非订单款
-        if (null != receiptDto.getReceiptType() && 2 == receiptDto.getReceiptType()) {
-            receiptPo.setNoOrderReason(receiptDto.getNoOrderReason());
+        if (null != receiptOperateDto.getReceiptType() && 2 == receiptOperateDto.getReceiptType()) {
+            receiptPo.setNoOrderReason(receiptOperateDto.getNoOrderReason());
             receiptPo.setReceiptStatus(2);
             receiptPo.setConfirmUserPermissionId(receiptUser.getId());
             receiptPo.setConfirmDate(time);
@@ -883,7 +883,7 @@ public class ReceiptServiceImpl implements ReceiptService {
     /**
      * 关联收款信息
      *
-     * @param receiptAssociateDto {
+     * @param receiptOperateDto {
      *                            id: 收款Id
      *                            orderIds: 关联订单IDS
      *                            confirmType: 确认订单类型:1小额抹平确认,2大额抹平确认,3大额退款余额,4确认关联
@@ -892,13 +892,13 @@ public class ReceiptServiceImpl implements ReceiptService {
      */
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public ResponseJson<Void> receiptAssociate(ReceiptAssociateDto receiptAssociateDto, HttpHeaders headers) {
+    public ResponseJson<Void> receiptAssociate(ReceiptOperateDto receiptOperateDto, HttpHeaders headers) {
         // 检查收款用户权限: 4收款关联订单
         ReceiptUserVo receiptUser = checkPermissions(4, headers);
         if (null == receiptUser) {
             return ResponseJson.error("无权限操作!", null);
         }
-        ReceiptVo receipt = receiptMapper.getReceiptDetail(receiptAssociateDto.getId());
+        ReceiptVo receipt = receiptMapper.getReceiptDetail(receiptOperateDto.getId());
         if (null == receipt) {
             return ResponseJson.error("收款数据异常!", null);
         }
@@ -910,17 +910,17 @@ public class ReceiptServiceImpl implements ReceiptService {
         BeanUtils.copyProperties(receipt, receiptPo);
         receiptPo.setUpdateDate(time);
         receiptPo.setReceiptStatus(2);
-        receiptPo.setConfirmType(receiptAssociateDto.getConfirmType());
+        receiptPo.setConfirmType(receiptOperateDto.getConfirmType());
         // 非订单款项确认
         if (2 == receipt.getReceiptType()) {
-            if (StringUtils.isNotBlank(receiptAssociateDto.getNoOrderReason())) {
-                receiptPo.setNoOrderReason(receiptAssociateDto.getNoOrderReason());
+            if (StringUtils.isNotBlank(receiptOperateDto.getNoOrderReason())) {
+                receiptPo.setNoOrderReason(receiptOperateDto.getNoOrderReason());
             }
         }
         // 订单款项
         if (1 == receipt.getReceiptType()) {
-            if (StringUtils.isNotBlank(receiptAssociateDto.getOrderIds())) {
-                String[] orderIDS = receiptAssociateDto.getOrderIds().split(",");
+            if (StringUtils.isNotBlank(receiptOperateDto.getOrderIds())) {
+                String[] orderIDS = receiptOperateDto.getOrderIds().split(",");
                 // 关联一个订单
                 if (orderIDS.length == 1) {
                     // 收款项和订单关系表
@@ -1094,20 +1094,20 @@ public class ReceiptServiceImpl implements ReceiptService {
     /**
      * 确认收款-关联供应商退款
      *
-     * @param receiptAssociateDto {
+     * @param receiptOperateDto {
      *                            id:          收款Id
      *                            shopOrderId: 关联供应商退款子订单ID
      *                            }
      */
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public ResponseJson<ReceiptPo> receiptAssociateRefund(ReceiptAssociateDto receiptAssociateDto, HttpHeaders headers) {
+    public ResponseJson<Void> receiptAssociateRefund(ReceiptOperateDto receiptOperateDto, HttpHeaders headers) {
         // 检查收款用户权限: 6收款关联供应商退款
         ReceiptUserVo receiptUser = checkPermissions(6, headers);
         if (null == receiptUser) {
             return ResponseJson.error("无权限操作!", null);
         }
-        ReceiptVo receipt = receiptMapper.getReceiptDetail(receiptAssociateDto.getId());
+        ReceiptVo receipt = receiptMapper.getReceiptDetail(receiptOperateDto.getId());
         if (null == receipt) {
             return ResponseJson.error("收款数据异常!", null);
         }
@@ -1115,9 +1115,9 @@ public class ReceiptServiceImpl implements ReceiptService {
         if (5 != receipt.getReceiptStatus() && 1 != receipt.getReceiptStatus()) {
             return ResponseJson.error("收款记录状态异常!", null);
         }
-        ShopOrderVo shopOrder = receiptMapper.getShopOrderById(receiptAssociateDto.getShopOrderId());
+        ShopOrderVo shopOrder = receiptMapper.getShopOrderById(receiptOperateDto.getShopOrderId());
         // 总退款金额
-        Double refundAmount = receiptMapper.getRefundShopAmount(receiptAssociateDto.getShopOrderId());
+        Double refundAmount = receiptMapper.getRefundShopAmount(receiptOperateDto.getShopOrderId());
         // 确认本次收款金额大于已付金额与已退金额的差值,不能关联
         if (MathUtil.compare(shopOrder.getPayedShopAmount(), MathUtil.add(refundAmount, receipt.getReceiptAmount())) < 0) {
             return ResponseJson.error("确认本次收款金额大于已付金额与已退金额的差值,不能关联!", null);
@@ -1136,7 +1136,7 @@ public class ReceiptServiceImpl implements ReceiptService {
         receiptMapper.updateReceipt(receiptPo);
         // 保存 收款项和订单关系
         OrderReceiptRelationPo relation = new OrderReceiptRelationPo();
-        relation.setOrderId(receiptAssociateDto.getShopOrderId());
+        relation.setOrderId(receiptOperateDto.getShopOrderId());
         relation.setReceiptId(receipt.getId());
         relation.setRelationType(1);
         relation.setAssociateAmount(receipt.getReceiptAmount());
@@ -1186,7 +1186,7 @@ public class ReceiptServiceImpl implements ReceiptService {
     /**
      * 确认收款-关联返佣款
      *
-     * @param receiptAssociateDto {
+     * @param receiptOperateDto {
      *                            id:           收款Id
      *                            shopOrderIds: 关联返佣子订单IDs
      *                            rebateRemarks:关联返佣备注
@@ -1194,19 +1194,19 @@ public class ReceiptServiceImpl implements ReceiptService {
      */
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public ResponseJson<ReceiptPo> receiptAssociateRebate(ReceiptAssociateDto receiptAssociateDto, HttpHeaders headers) {
+    public ResponseJson<Void> receiptAssociateRebate(ReceiptOperateDto receiptOperateDto, HttpHeaders headers) {
         // 检查收款用户权限: 5收款关联返佣
         ReceiptUserVo receiptUser = checkPermissions(5, headers);
         if (null == receiptUser) {
             return ResponseJson.error("无权限操作!", null);
         }
-        String[] shopOrderIdArr = receiptAssociateDto.getShopOrderIds().split(",");
+        String[] shopOrderIdArr = receiptOperateDto.getShopOrderIds().split(",");
 
         List<Integer> shopIdList = receiptMapper.getShopIdList(shopOrderIdArr);
         if (shopIdList.size() > 1) {
             return ResponseJson.error("子订单不属于相同的供应商!", null);
         }
-        ReceiptVo receipt = receiptMapper.getReceiptDetail(receiptAssociateDto.getId());
+        ReceiptVo receipt = receiptMapper.getReceiptDetail(receiptOperateDto.getId());
         if (null == receipt) {
             return ResponseJson.error("收款数据异常!", null);
         }
@@ -1225,8 +1225,8 @@ public class ReceiptServiceImpl implements ReceiptService {
         receiptPo.setReceiptStatus(2);
         receiptPo.setConfirmDate(time);
         receiptPo.setConfirmUserPermissionId(receiptUser.getId());
-        if (StringUtils.isNotBlank(receiptAssociateDto.getRebateRemarks())) {
-            receiptPo.setRebateRemarks(receiptAssociateDto.getRebateRemarks());
+        if (StringUtils.isNotBlank(receiptOperateDto.getRebateRemarks())) {
+            receiptPo.setRebateRemarks(receiptOperateDto.getRebateRemarks());
         }
         receiptMapper.updateReceipt(receiptPo);
         for (String shopOrderId : shopOrderIdArr) {
@@ -1260,23 +1260,299 @@ public class ReceiptServiceImpl implements ReceiptService {
                 order.setReceiptStatus(3);
                 order.setPayStatus(3);
                 if (order.getStatus().toString().length() == 2) {
-                    order.setStatus(Integer.valueOf("3" + order.getStatus().toString().substring(1, 2)));
+                    order.setStatus(Integer.valueOf("3" + order.getStatus().toString().charAt(1)));
                 }
             } else {
                 //子订单的款还没有收全
                 order.setReceiptStatus(2);
                 order.setPayStatus(2);
                 if (order.getStatus().toString().length() == 2) {
-                    order.setStatus(Integer.valueOf("2" + order.getStatus().toString().substring(1, 2)));
+                    order.setStatus(Integer.valueOf("2" + order.getStatus().toString().charAt(1)));
                 }
             }
             order.setUpdateDate(time);
-            // 更新订单状态
-            receiptMapper.updateOrderStatus(order);
+            // 更新订单收款状态
+            payOrderMapper.updateOrderStatus(order);
         }
         return ResponseJson.success("关联返佣款成功!", null);
     }
 
+    /**
+     * 审核收款信息
+     *
+     * @param id            收款Id
+     * @param receiptStatus 收款状态
+     * @param reviewReason  审核不通过原因
+     */
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public ResponseJson<Void> receiptAudit(Integer id, Integer receiptStatus, String reviewReason, HttpHeaders headers) {
+        // 检查收款用户权限: 7收款审核
+        ReceiptUserVo receiptUser = checkPermissions(7, headers);
+        if (null == receiptUser) {
+            return ResponseJson.error("无权限操作!", null);
+        }
+        ReceiptVo receipt = receiptMapper.getReceiptDetail(id);
+        if (null == receipt) {
+            return ResponseJson.error("收款数据异常!", null);
+        }
+        // ReceiptVo -- copy to --> ReceiptPo
+        String time = DateUtils.getDateTime();
+        ReceiptPo receiptPo = new ReceiptPo();
+        BeanUtils.copyProperties(receipt, receiptPo);
+        receiptPo.setUpdateDate(time);
+        // 收款项和订单关系
+        List<OrderReceiptRelationPo> listRelation = new ArrayList<>();
+        // 订单款项
+        if (null != receipt.getReceiptType() && 1 == receipt.getReceiptType()){
+            // 只要当收款状态为已确认状态时候才能做审核操作
+            if (3 == receiptStatus && 2 == receipt.getReceiptStatus()) {
+                // 收款项和订单关系
+                listRelation = receiptMapper.getOrderReceiptRelationList(receipt.getId());
+                String statusFlag = "";
+                Integer orderReceiptStatus = null;
+                Double totalAssociateAmount = 0d;
+                for (OrderReceiptRelationPo relationItem : listRelation) {
+                    // 订单信息
+                    OrderVo order = orderCommonMapper.getOrderByOrderId(relationItem.getOrderId());
+                    Double payAbleAmount = order.getPayableAmount();
+                    Double unPayMoney = getUnPayMoney(order, false);
+                    log.info("-----------------UnPayMoney:" + unPayMoney + ", payAbleAmount:" + payAbleAmount);
+                    if (unPayMoney.equals(relationItem.getAssociateAmount())) {
+                        //确认关联(收款金额=订单应付金额)
+                        statusFlag = "3";
+                        orderReceiptStatus = 3;
+                    } else if (relationItem.getAssociateAmount() < unPayMoney) {
+                        /*(收款金额<订单应付金额)*/
+                        statusFlag = "2";
+                        orderReceiptStatus = 2;
+                    } else if (relationItem.getAssociateAmount() > unPayMoney) {
+                        /*(收款金额>订单应付金额)*/
+                        statusFlag = "3";
+                        orderReceiptStatus = 3;
+                    }
+                    //大额退款余额-大额抹平确认-小额抹平确认
+                    if (null != receipt.getConfirmType() && (3 == receipt.getConfirmType() || 2 == receipt.getConfirmType() || 1 == receipt.getConfirmType())) {
+                        // 查询待审核数量
+                        int pendingCount = receiptMapper.getPendingtAuditCount(order.getOrderId());
+                        if (pendingCount > 1) {
+                            int i = pendingCount - 1;
+                            String operating;
+                            if (3 == receipt.getConfirmType()) {
+                                operating = "多收退余额";
+                            } else if (2 == receipt.getConfirmType()) {
+                                operating = "多收抹平";
+                            } else {
+                                operating = "少收抹平";
+                            }
+                            // 设置手动回滚事务
+                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                            log.info("本条收款进行了" + operating + "操作需要最后审核,请先审核该订单的其他" + i + "条收款");
+                            return ResponseJson.error("本条收款进行了" + operating + "操作需要最后审核,请先审核该订单的其他" + i + "条收款", null);
+                        }
+                        statusFlag = "3";
+                        orderReceiptStatus = 3;
+                        totalAssociateAmount += relationItem.getAssociateAmount();
+                    }
+                    statusFlag = statusFlag + order.getStatus().toString().charAt(1);
+                    order.setStatus(Integer.parseInt(statusFlag));
+                    order.setReceiptStatus(orderReceiptStatus);
+                    //设置订单状态
+                    //获取主订单下面的所有的确认收货商品数量
+                    Integer receiptNum = receiptMapper.getReceiptNumByOrderId(order.getOrderId());
+                    Integer returnAndCancelNum = 0;
+                    //获取该主订单下面所有已完成状态退货退款商品数量
+                    if (null != order.getRefundType() && (1 == order.getRefundType() || 2 == order.getRefundType())) {
+                        returnAndCancelNum = receiptMapper.getReturnAndCancelNum(order.getOrderId());
+                    }
+                    //确认收货商品数量+已完成状态退货退款商品数量 = 订单商品总数
+                    if (order.getProductCount().equals(returnAndCancelNum + receiptNum)) {
+                        //已收款--->交易完成
+                        //已收款+已付款--->订单完成
+                        if (3 == order.getReceiptStatus()) {
+                            order.setStatus(OrderStatus.TRANSACTION_COMPLETED.getCode());
+                        }
+                        if (3 == order.getReceiptStatus() && 3 == order.getPayStatus()) {
+                            order.setStatus(OrderStatus.ORDER_COMPLETED.getCode());
+                        }
+                    }
+                    // 更新订单收款状态
+                    payOrderMapper.updateOrderStatus(order);
+                    log.info("-------------审核通过订单状态改变---orderID:" + order.getOrderId() + "--status:" + order.getStatus());
+                    //判断是否有充值商品,充值到余额
+                    Integer rechargeGoods = null;
+                    //缴纳订金订单
+                    int[] productId1 = {6060, 6061, 6062, 6063, 6064};
+                    //充值余额订单
+                    int[] productId2 = {6065, 6066, 6067, 6068, 6069};
+                    List<OrderProductVo> orderProductList = orderCommonMapper.getOrderProductByOrderId(order.getOrderId());
+                    for (OrderProductVo orderProduct : orderProductList) {
+                        if (ArrayUtils.contains(productId1, orderProduct.getProductId())) {
+                            rechargeGoods = 1;
+                            break;
+                        }
+                        if (ArrayUtils.contains(productId2, orderProduct.getProductId())) {
+                            rechargeGoods = 2;
+                            break;
+                        }
+                    }
+                    // 充值与订金订单
+                    if (rechargeGoods != null) {
+                        Double userMoney = baseMapper.getUserMoney(order.getUserId());
+                        Double ableUserMoney = baseMapper.getAbleUserMoney(order.getUserId());
+                        userMoney = MathUtil.add(userMoney, relationItem.getAssociateAmount()).doubleValue();
+                        ableUserMoney = MathUtil.add(ableUserMoney, relationItem.getAssociateAmount()).doubleValue();
+                        //保存余额到余额收支记录
+                        BalanceRecordPo balanceRecord = new BalanceRecordPo();
+                        balanceRecord.setUserId(order.getUserId());
+                        balanceRecord.setType(1);
+                        if (rechargeGoods == 1) {
+                            balanceRecord.setBalanceType(6);
+                        } else {
+                            balanceRecord.setBalanceType(7);
+                        }
+                        balanceRecord.setAddDate(new Date());
+                        balanceRecord.setAmount(relationItem.getAssociateAmount());
+                        balanceRecord.setOrderId(order.getOrderId());
+                        balanceRecord.setReceiptId(receipt.getId());
+                        balanceRecord.setRemark("订单商品充值余额");
+                        balanceRecord.setDelFlag(0);
+                        // 保存 余额收支记录
+                        baseMapper.insertBalanceRecord(balanceRecord);
+                        baseMapper.updateUserMoney(userMoney, ableUserMoney, order.getUserId());
+                        log.info("订单商品充值余额>>>>>>>>>>>>>" + relationItem.getAssociateAmount());
+                    }
+                    if (null != orderReceiptStatus && 3 == orderReceiptStatus) {
+                        // 已收款赠送采美豆自主下单赠送采美豆
+                        if (1 == order.getOrderType()) {
+                            UserBeansHistoryPo beansHistory = new UserBeansHistoryPo();
+                            beansHistory.setUserId(order.getUserId());
+                            beansHistory.setOrderId(order.getOrderId());
+                            beansHistory.setBeansType(5);
+                            beansHistory.setType(1);
+                            beansHistory.setPushStatus(0);
+                            beansHistory.setAddTime(new Date());
+                            beansHistory.setDelFlag(0);
+                            int num;
+                            if (MathUtil.compare(1000, order.getPayTotalFee()) > -1) {
+                                num = 0;
+                            } else if (MathUtil.compare(5000, order.getPayTotalFee()) > -1) {
+                                num = 1000;
+                            } else if (MathUtil.compare(10000, order.getPayTotalFee()) > -1) {
+                                num = 2500;
+                            } else if (MathUtil.compare(25000, order.getPayTotalFee()) > -1) {
+                                num = 5000;
+                            } else if (MathUtil.compare(100000, order.getPayTotalFee()) > -1) {
+                                num = 7500;
+                            } else if (MathUtil.compare(250000, order.getPayTotalFee()) > -1) {
+                                num = 10000;
+                            } else if (MathUtil.compare(500000, order.getPayTotalFee()) > -1) {
+                                num = 12500;
+                            } else {
+                                num = 20000;
+                            }
+                            if (num > 0) {
+                                beansHistory.setNum(num);
+                                // 保存 采美豆使用记录
+                                baseMapper.insertBeansHistory(beansHistory);
+                                Integer userBeans = baseMapper.getUserBeans(order.getUserId());
+                                userBeans += num;
+                                baseMapper.updateUserBeans(order.getUserId(), userBeans);
+                                log.info("【线下收款】>>>>>更新用户采美豆(update[user(userBeans:" + userBeans + ")]),userId:" + beansHistory.getUserId());
+
+                            }
+                        }
+                    }
+                }
+
+                if (null != receipt.getConfirmType() && 3 == receipt.getConfirmType()) {
+                    Double money = receipt.getReceiptAmount() - totalAssociateAmount;
+                    // 订单信息
+                    OrderVo order = orderCommonMapper.getOrderByOrderId(listRelation.get(0).getOrderId());
+                    Double userMoney = baseMapper.getUserMoney(order.getUserId());
+                    Double ableUserMoney = baseMapper.getAbleUserMoney(order.getUserId());
+                    log.info("----------------------->原余额:" + userMoney + "==原可用余额:" + ableUserMoney);
+                    // 减操作不更新可用余额
+                    if (money < 0d) {
+                        if (0 != order.getStatus()) {
+                            userMoney = MathUtil.add(userMoney, money).doubleValue();
+                        }
+                    } else {
+                        // 待确认状态不需要修改余额,因为本身存在冻结余额不需要重复退回
+                        if (0 != order.getStatus()) {
+                            userMoney = MathUtil.add(ableUserMoney, money).doubleValue();
+                        }
+                        ableUserMoney = MathUtil.add(ableUserMoney, money).doubleValue();
+                    }
+                    log.info("大额抹平金额退回账户:" + order.getUserId() + ",------->大额抹平金额:" + money);
+                    //保存余额到余额收支记录
+                    BalanceRecordPo balanceRecord = new BalanceRecordPo();
+                    balanceRecord.setUserId(order.getUserId());
+                    balanceRecord.setType(1);
+                    balanceRecord.setBalanceType(2);
+                    balanceRecord.setAddDate(new Date());
+                    balanceRecord.setAmount(money);
+                    balanceRecord.setOrderId(order.getOrderId());
+                    balanceRecord.setReceiptId(receipt.getId());
+                    balanceRecord.setRemark("订单商品充值余额");
+                    balanceRecord.setDelFlag(0);
+                    // 保存 余额收支记录
+                    baseMapper.insertBalanceRecord(balanceRecord);
+                    baseMapper.updateUserMoney(userMoney, ableUserMoney, order.getUserId());
+                    log.info("大额抹平金额退回账户>>>>>>>>>>>>>" + money);
+                }
+            } else if (4 == receiptStatus && 2 == receipt.getReceiptStatus()) {
+                //审核不通过
+                receiptPo.setReviewReason(reviewReason);
+            } else {
+                // 设置手动回滚事务
+                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                log.info("订单不是已确认状态 或者 审核结果不正确");
+                return ResponseJson.error("审核信息有误!", null);
+            }
+        }
+        receiptPo.setReviewUserPermissionId(receiptUser.getId());
+        receiptPo.setReceiptStatus(receiptStatus);
+        receiptPo.setReviewDate(time);
+        receiptMapper.updateReceipt(receiptPo);
+
+        // 推送消息给指定人员
+        if (3 == receiptStatus) {
+            // 审核通过
+            String title = "订单支付成功!";
+            String openid = receiptUser.getOpenid();
+            String date = receiptPo.getReceiptDate();
+            for (OrderReceiptRelationPo relationItem : listRelation) {
+                // 订单信息
+                OrderVo order = orderCommonMapper.getOrderByOrderId(relationItem.getOrderId());
+                String remarkText = "订单ID:"+order.getOrderId()+","+order.getReceiptStatus()+",买家:"+order.getUserName();
+
+                //todo /spCmOrder/listDetails.rpc?orderId="+order.getOrderId()
+                String redirectUrl = "";
+                // sendTemplateMsg(openid, 标题, 金额, 收款日期, 备注, 跳转链接)
+                weChatService.sendTemplateMsg(openid, title, relationItem.getAssociateAmount(), date, remarkText, redirectUrl);
+            }
+        } else {
+            // 审核未通过
+            String title = "订单审核未通过,请重新确认审核!";
+            String date = receipt.getReceiptDate();
+            String receiptTypeStr = receiptMapper.getReceiptTypeStrById(receipt.getPayType());
+            String remarkText = "收款类型:"+ receiptTypeStr +";"+"审核时间:"+receiptPo.getReviewDate();
+            double associateAmount = receiptMapper.countAssociateAmountById(receipt.getId());
+            List<String> openidList = receiptMapper.getOpenidListByUserType(1);
+            openidList.removeIf(Objects::isNull);
+
+            // todo /api/user/receivables/toReceivablesPage.rpc?pageName="+pageName+"&id="+receipt.getId()
+            String redirectUrl = "";
+
+            for (String openid : openidList) {
+                // sendTemplateMsg(openid, 标题, 金额, 收款日期, 备注, 跳转链接)
+                weChatService.sendTemplateMsg(openid, title, associateAmount, date, remarkText, redirectUrl);
+            }
+        }
+        return ResponseJson.success("审核收款信息成功!", null);
+    }
+
     /**
      * 设置订单的款项信息
      */

+ 6 - 0
src/main/resources/mapper/BaseMapper.xml

@@ -288,6 +288,12 @@
         SET status = #{clubStatus}
         WHERE userID = #{userId}
     </update>
+    <update id="updateUserMoney">
+        UPDATE USER
+        SET userMoney     = #{userMoney},
+            ableUserMoney = #{ableUserMoney}
+        WHERE userID = #{userId}
+    </update>
     <insert id="insertBalanceRecord" parameterType="com.caimei365.order.model.po.BalanceRecordPo">
         INSERT INTO cm_user_balance_record (userId, type, balanceType, addDate, amount, orderId, receiptId, remark, delFlag)
         VALUES (#{userId}, #{type}, #{balanceType}, #{addDate}, #{amount}, #{orderId}, #{receiptId}, #{remark}, #{delFlag})

+ 28 - 23
src/main/resources/mapper/ReceiptMapper.xml

@@ -136,27 +136,6 @@
     <update id="updateShopOrdePayStatus">
         UPDATE cm_shop_order SET payStatus = #{payStatus} WHERE shopOrderID = #{shopOrderId}
     </update>
-    <update id="updateOrderStatus">
-        UPDATE cm_order SET
-        status = #{status}
-        <if test="receiptStatus != null and receiptStatus != ''">
-            ,receiptStatus = #{receiptStatus}
-        </if>
-        <if test="payStatus != null and payStatus != ''">
-            ,payStatus = #{payStatus}
-        </if>
-        <if test="confirmFlag != null and confirmFlag != ''">
-            ,confirmFlag = #{confirmFlag}
-        </if>
-        <if test="confirmTime != null and confirmTime != ''">
-            ,confirmTime = #{confirmTime}
-        </if>
-        <if test="affirmPaymentFlag != null and affirmPaymentFlag != ''">
-            ,affirmPaymentFlag = #{affirmPaymentFlag}
-        </if>
-        ,updateDate = #{updateDate}
-        WHERE orderID = #{orderId}
-    </update>
     <select id="getReceiptUserByOpenid" resultType="com.caimei365.order.model.vo.ReceiptUserVo">
         SELECT DISTINCT id, user_type AS userType, name, mobile, openid, unionId, password
         FROM cm_receipt_user
@@ -340,6 +319,7 @@
         cdr.handlingFee,
         cdr.orderFlag,
         cdr.noOrderReason,
+        cdr.confirmType,
         cru.name AS confirmUserName,
         su.fullName AS cancelUserName,
         CASE WHEN cror.relationType = 2 THEN co.organizeID
@@ -368,6 +348,7 @@
             o.orderNo,
             o.userID AS userId,
             o.clubID AS clubId,
+            o.organizeID AS organizeId,
             o.buyUserID AS buyUserId,
             o.orderTime AS orderTime,
             o.updateDate AS updateDate,
@@ -428,6 +409,7 @@
         o.orderNo,
         o.userID AS userId,
         o.clubID AS clubId,
+        o.organizeID AS organizeId,
         o.buyUserID AS buyUserId,
         o.orderTime AS orderTime,
         o.updateDate AS updateDate,
@@ -472,7 +454,6 @@
             IFNULL(u.userName, u.name) AS userName,
         </if>
         <if test="organizeId > 0">
-            u.name AS "userName",
             IFNULL(u.name, u.userName) AS userName,
         </if>
         '0' AS haveReturning,
@@ -530,6 +511,7 @@
             o.orderNo,
             o.userID AS userId,
             o.clubID AS clubId,
+            o.organizeID AS organizeId,
             o.buyUserID AS buyUserId,
             o.orderTime AS orderTime,
             o.updateDate AS updateDate,
@@ -848,5 +830,28 @@
         INSERT INTO cm_refund_shop_record( shopID, shopOrderID, shopOrderNo, refundAmount, refundType, refundTime, refundShopID)
         VALUES (#{shopId}, #{shopOrderId}, #{shopOrderNo}, #{refundAmount}, #{refundType}, #{refundTime}, #{refundShopId})
     </insert>
-
+    <select id="getOrderReceiptRelationList" resultType="com.caimei365.order.model.po.OrderReceiptRelationPo">
+        SELECT
+        cror.id,
+        cror.relationType,
+        cror.receiptId,
+        cror.associateAmount,
+        cror.orderId,
+        cror.delFlag,
+        cror.mbOrderId,
+        cror.orderRequestNo,
+        cror.splitStatus
+        FROM cm_receipt_order_relation cror
+        WHERE cror.receiptID = #{receiptId}
+        ORDER BY cror.id DESC
+    </select>
+    <select id="getPendingtAuditCount" 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,4)
+    </select>
 </mapper>