Browse Source

获取收款详情

chao 3 năm trước cách đây
mục cha
commit
8564f38817

+ 16 - 0
src/main/java/com/caimei365/order/controller/ReceiptApi.java

@@ -148,5 +148,21 @@ public class ReceiptApi {
         return receiptService.getReceiptList(receiptType, receiptStatus, smsContent, startDate, endDate, openid, pageNum, pageSize);
     }
 
+    /**
+     * 获取收款详情
+     */
+    @ApiOperation("获取收款详情")
+    @ApiImplicitParams({
+            @ApiImplicitParam(required = true, name = "id", value = "款项Id"),
+            @ApiImplicitParam(required = false, name = "openid", value = "微信openid")
+    })
+    @GetMapping("/list")
+    public ResponseJson<ReceiptVo> getReceiptDetail(Integer id, String openid) {
+        if (!StringUtils.hasLength(openid)) {
+            return ResponseJson.error("微信openid不能为空!", null);
+        }
+        return receiptService.getReceiptDetail(id, openid);
+    }
+
 }
 

+ 13 - 0
src/main/java/com/caimei365/order/mapper/ReceiptMapper.java

@@ -2,6 +2,7 @@ package com.caimei365.order.mapper;
 
 import com.caimei365.order.model.bo.ReceiptParamsBo;
 import com.caimei365.order.model.po.ReceiptPo;
+import com.caimei365.order.model.vo.OrderVo;
 import com.caimei365.order.model.vo.ReceiptTypeVo;
 import com.caimei365.order.model.vo.ReceiptUserVo;
 import com.caimei365.order.model.vo.ReceiptVo;
@@ -45,6 +46,10 @@ public interface ReceiptMapper {
      * 获取收款类型列表
      */
     List<ReceiptTypeVo> getReceiptType();
+    /**
+     * 获取收款类型
+     */
+    ReceiptTypeVo getReceiptTypeById(Integer id);
     /**
      * 短信内容Md5加密串 获取收款记录
      */
@@ -85,4 +90,12 @@ public interface ReceiptMapper {
      * 获取收款列表
      */
     List<ReceiptVo> getReceiptList(ReceiptParamsBo receiptParamsBo);
+    /**
+     * 获取收款详情
+     */
+    ReceiptVo getReceiptDetail(Integer id);
+    /**
+     * 获取收款关联订单
+     */
+    List<OrderVo> getReceiptOrders(Integer receiptId);
 }

+ 4 - 1
src/main/java/com/caimei365/order/model/bo/ReceiptParamsBo.java

@@ -1,6 +1,5 @@
 package com.caimei365.order.model.bo;
 
-import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -15,6 +14,10 @@ import java.util.List;
 @Data
 public class ReceiptParamsBo implements Serializable {
     private static final long serialVersionUID = 1L;
+    /**
+     * 款项id
+     */
+    private Integer id;
     /**
      * 收款款项类型:1订单款,2非订单款,3返佣款
      */

+ 47 - 0
src/main/java/com/caimei365/order/model/enums/ReceiptStatus.java

@@ -0,0 +1,47 @@
+package com.caimei365.order.model.enums;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2022/2/17
+ */
+public enum ReceiptStatus {
+    /**
+     * 收款状态:1待确认、2已确认(待审核)、3审核通过、4审核未通过、5收款撤销【订单款项状态:12345】【非订单款项状态:125】【返佣款状态:125】【线上支付成功为审核通过】
+     */
+    DAIQUEREN(1, "待确认"),
+    YIQUEREN(2, "已确认(待审核)"),
+    SHENGHETONGGUO(3, "审核通过"),
+    SHENGHEWEITONGGUO(4, "审核未通过"),
+    SHOUKUANCHEXIAO(5, "收款撤销");
+
+    private final int code;
+    private final String desc;
+
+    public static String getTypeDesc(Integer code, Integer receiptType) {
+        for (ReceiptStatus type : ReceiptStatus.values()) {
+            if (type.getCode() == code) {
+                boolean flag = code == YIQUEREN.getCode() && (receiptType == ReceiptType.FEIDINGDAN.getCode() || receiptType == ReceiptType.SHOPREFUND.getCode());
+                if (flag) {
+                    return "已确认";
+                }
+                return type.desc;
+            }
+        }
+        return "";
+    }
+
+    public int getCode() {
+        return code;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+
+    ReceiptStatus(int code, String desc) {
+        this.code = code;
+        this.desc = desc;
+    }
+}

+ 42 - 0
src/main/java/com/caimei365/order/model/enums/ReceiptType.java

@@ -0,0 +1,42 @@
+package com.caimei365.order.model.enums;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2022/2/17
+ */
+public enum ReceiptType {
+    /**
+     * 收款款项类型:1订单款,2非订单款,3返佣款
+     */
+    DINGDAN(1, "订单款"),
+    FEIDINGDAN(2, "非订单款"),
+    FANYONG(3, "返佣款"),
+    SHOPREFUND(5, "供应商退款");
+
+    private final int code;
+    private final String desc;
+
+    public int getCode() {
+        return code;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+
+    ReceiptType(int code, String desc) {
+        this.code = code;
+        this.desc = desc;
+    }
+
+    public static String getTypeDesc(int code) {
+        for (ReceiptType type : ReceiptType.values()) {
+            if (type.getCode() == code) {
+                return type.desc;
+            }
+        }
+        return "";
+    }
+}

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

@@ -267,5 +267,12 @@ public class OrderVo implements Serializable {
      * 是否有商品发票属性的限制,为true时只能线下支付
      */
     private boolean invoiceStatus = false;
-
+    /**
+     * 客户名称
+     */
+    private String userName;
+    /**
+     * 收款详情是否可以查看
+     */
+    private Boolean authority = false;
 }

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

@@ -23,5 +23,5 @@ public class ReceiptTypeVo implements Serializable {
      * 收款类型
      */
     @ApiModelProperty("收款类型名称")
-    private Integer type;
+    private String type;
 }

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

@@ -3,6 +3,7 @@ package com.caimei365.order.model.vo;
 import lombok.Data;
 
 import java.io.Serializable;
+import java.util.List;
 
 /**
  * Description
@@ -25,14 +26,17 @@ public class ReceiptVo implements Serializable {
      * 付款类型: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 payTypeText;
     /**
      * 收款款项类型:1订单款,2非订单款,3返佣款
      */
     private Integer receiptType;
+    private String receiptTypeText;
     /**
      * 收款状态:1待确认、2已确认(待审核)、3审核通过、4审核未通过、5收款撤销【订单款项状态:12345】【非订单款项状态:125】【返佣款状态:125】【线上支付成功为审核通过】
      */
     private Integer receiptStatus;
+    private String receiptStatusText;
     /**
      * 收款金额(线上一次性付款和支付金额一致)
      */
@@ -41,6 +45,10 @@ public class ReceiptVo implements Serializable {
      * 收款时间
      */
     private String receiptDate;
+    /**
+     * 确认时间
+     */
+    private String confirmDate;
     /**
      * 单次收款金额
      */
@@ -73,5 +81,24 @@ public class ReceiptVo implements Serializable {
      * 自动审核收款标记(0手动分享去确认审核,1收款直接确认并审核[适用星范带有正确订单标识的收款])
      */
     private String autoAuditFlag;
-
+    /**
+     * 订单组织ID
+     */
+    private Integer organizeId;
+    /**
+     * 提示信息
+     */
+    private String tipMsg;
+    /**
+     * 订单机构用户ID
+     */
+    private Integer userId;
+    /**
+     * 订单机构客户名称
+     */
+    private String userName;
+    /**
+     * 关联订单列表
+     */
+    private List<OrderVo> orderList;
 }

+ 8 - 0
src/main/java/com/caimei365/order/service/ReceiptService.java

@@ -66,4 +66,12 @@ public interface ReceiptService {
      * @param pageSize      每页数量
      */
     ResponseJson<PageInfo<ReceiptVo>> getReceiptList(String receiptType, String receiptStatus, String smsContent, String startDate, String endDate, String openid, int pageNum, int pageSize);
+
+    /**
+     * 获取收款详情
+     *
+     * @param id     款项Id
+     * @param openid 微信openid
+     */
+    ResponseJson<ReceiptVo> getReceiptDetail(Integer id, String openid);
 }

+ 85 - 3
src/main/java/com/caimei365/order/service/impl/ReceiptServiceImpl.java

@@ -9,6 +9,8 @@ import com.caimei365.order.model.ResponseJson;
 import com.caimei365.order.model.bo.ReceiptParamsBo;
 import com.caimei365.order.model.dto.ReceiptDto;
 import com.caimei365.order.model.enums.OrderStatus;
+import com.caimei365.order.model.enums.ReceiptStatus;
+import com.caimei365.order.model.enums.ReceiptType;
 import com.caimei365.order.model.po.BalanceRecordPo;
 import com.caimei365.order.model.po.OrderReceiptRelationPo;
 import com.caimei365.order.model.po.ReceiptPo;
@@ -58,7 +60,7 @@ public class ReceiptServiceImpl implements ReceiptService {
     /**
      * 只有当识别出来的收款类型是广发银行-5461 ,中信银行-0897,中信银行0897-财付通 和 中信银行0897-支付宝时,才会显示手续费,并且自动勾选上手续费,默认按收款金额的千分之一计算 (收款金额 - 手续费 = 短信中收到的金额)
      */
-    private static final List<Integer> tipFeeType = Arrays.asList(4, 5, 6, 11);
+    private static final List<Integer> TIP_FEE_TYPE = Arrays.asList(4, 5, 6, 11);
     private static final Pattern PATTERN_NUMBER = Pattern.compile("[\\*0-9\\.:]+");
     private static final Pattern PATTERN_ORDER = Pattern.compile("#(.*?)#");
     private static final Pattern PATTERN_ORDER_ID = Pattern.compile("^[-\\+]?[\\d]*$");
@@ -453,10 +455,90 @@ public class ReceiptServiceImpl implements ReceiptService {
         // 分页请求数据
         PageHelper.startPage(pageNum, pageSize);
         List<ReceiptVo> list = receiptMapper.getReceiptList(paramsBo);
+        for (ReceiptVo receipt : list) {
+            if (null != receipt) {
+                setReceiptDetail(receipt);
+            }
+        }
         PageInfo<ReceiptVo> pageInfo = new PageInfo(list);
         return ResponseJson.success(pageInfo);
     }
 
+    /**
+     * 获取收款详情
+     *
+     * @param id     款项Id
+     * @param openid 微信openid
+     */
+    @Override
+    public ResponseJson<ReceiptVo> getReceiptDetail(Integer id, String openid) {
+        // 收款用户
+        ReceiptUserVo receiptUser = checkPermissions(1, openid);
+        if (null == receiptUser) {
+            return ResponseJson.error("无权限操作!", null);
+        }
+        ReceiptVo receipt = receiptMapper.getReceiptDetail(id);
+        if (null != receipt) {
+            setReceiptDetail(receipt);
+            String receiptStatus = receipt.getReceiptStatus().toString();
+            List<OrderVo> orderList = new ArrayList<>();
+            if ("1".equals(receiptStatus)) {
+                // 待确认
+                if (StringUtils.isNotBlank(receipt.getOrderFlag())) {
+                    // 订单信息
+                    OrderVo order = orderCommonMapper.getOrderByOrderId(Integer.parseInt(receipt.getOrderFlag()));
+                    if (null != order) {
+                        orderList.add(order);
+                    }
+                }
+                log.info("--------待确认--------");
+            } else {
+                // 已确认
+                orderList = receiptMapper.getReceiptOrders(receipt.getId());
+                log.info("--------已确认--------");
+            }
+            if (!CollectionUtils.isEmpty(orderList)) {
+                // 获取该收款用户下的机构userIds
+                List<Integer> clubUserIds = getReceiptClubUserIds(openid, receiptStatus);
+                for (OrderVo order : orderList) {
+                    if (4 == receiptUser.getUserType() || clubUserIds.contains(order.getUserId())) {
+                        // 收款详情是否可以查看
+                        order.setAuthority(true);
+                    }
+                }
+            }
+            receipt.setOrderList(orderList);
+        }
+        return ResponseJson.success(receipt);
+    }
+
+    /**
+     * 设置收款详情信息
+     */
+    private void setReceiptDetail(ReceiptVo receipt) {
+        if (1 == receipt.getReceiptStatus()) {
+            String time = receipt.getReceiptDate();
+            long diff = DateUtils.pastHour(DateUtils.parseDate(time));
+            if (diff > 12) {
+                receipt.setTipMsg("无人确认");
+            }
+        } else if (2 == receipt.getReceiptStatus()) {
+            String time = receipt.getConfirmDate();
+            long diff = DateUtils.pastHour(DateUtils.parseDate(time));
+            if (diff > 12) {
+                receipt.setTipMsg("无人审核");
+            }
+        }
+        if (2 == receipt.getReceiptStatus() && 1 == receipt.getReceiptType()) {
+            String userName = baseMapper.getUserNameByUserId(receipt.getUserId());
+            receipt.setUserName(userName);
+        }
+        ReceiptTypeVo type = receiptMapper.getReceiptTypeById(receipt.getPayType());
+        receipt.setPayTypeText(type.getType());
+        receipt.setReceiptTypeText(ReceiptType.getTypeDesc(receipt.getReceiptType()));
+        receipt.setReceiptStatusText(ReceiptStatus.getTypeDesc(receipt.getReceiptStatus(), receipt.getReceiptType()));
+    }
+
     /**
      * 获取该收款用户下的机构userIds
      *
@@ -626,7 +708,7 @@ public class ReceiptServiceImpl implements ReceiptService {
             /*识别手续费*/
             boolean tipFeeFlag = false;
             double tipFee = 0d;
-            if (tipFeeType.contains(typeId)) {
+            if (TIP_FEE_TYPE.contains(typeId)) {
                 tipFeeFlag = true;
                 tipFee = MathUtil.mul(money, MathUtil.div(1, 1000), 2).doubleValue();
                 // 收款金额 = 短信收款金额+手续费
@@ -678,7 +760,7 @@ public class ReceiptServiceImpl implements ReceiptService {
     private ReceiptVo getReceiptByMd5Msg(String md5Msg) {
         List<ReceiptVo> receiptList = receiptMapper.getReceiptBySmsMd5Code(md5Msg);
         if (!CollectionUtils.isEmpty(receiptList)) {
-            receiptList.get(0).setHaveFee(tipFeeType.contains(receiptList.get(0).getPayType()));
+            receiptList.get(0).setHaveFee(TIP_FEE_TYPE.contains(receiptList.get(0).getPayType()));
             return receiptList.get(0);
         }
         return null;

+ 106 - 0
src/main/resources/mapper/ReceiptMapper.xml

@@ -191,6 +191,9 @@
     <select id="getReceiptType" resultType="com.caimei365.order.model.vo.ReceiptTypeVo">
         SELECT `id`,`type` FROM cm_receipt_type ORDER BY id
     </select>
+    <select id="getReceiptTypeById" resultType="com.caimei365.order.model.vo.ReceiptTypeVo">
+        SELECT `id`,`type` FROM cm_receipt_type WHERE id = #{id}
+    </select>
     <select id="getReceivablesTypeId" resultType="java.lang.Integer">
         SELECT DISTINCT IFNULL(id, 0) FROM cm_receipt_type WHERE type=#{type}
     </select>
@@ -260,6 +263,7 @@
             cdr.receiptAmount,
             cdr.smsMd5Code,
             cdr.receiptDate,
+            cdr.confirmDate,
             cdr.handlingFee,
             cdr.orderFlag,
             IFNULL((
@@ -279,8 +283,15 @@
             cdr.receiptAmount,
             cdr.smsMd5Code,
             cdr.receiptDate,
+            cdr.confirmDate,
             cdr.handlingFee,
             cdr.orderFlag,
+            CASE WHEN cror.relationType = 2 THEN co.organizeID
+                 WHEN cror.relationType = 1 THEN cso.organizeID
+                 ELSE '' END AS organizeId,
+            CASE WHEN cror.relationType = 2 THEN co.userID
+                 WHEN cror.relationType = 1 THEN cso.userID
+                 ELSE '' END AS userId,
             IFNULL((
                 SELECT SUM(b.associateAmount) FROM cm_receipt_order_relation b WHERE b.receiptID = cdr.id AND b.delFlag = '0'
             ), 0) AS associateAmount
@@ -289,6 +300,9 @@
             LEFT JOIN cm_order co ON (cror.orderID = co.orderID AND cror.relationType = 2)
             LEFT JOIN cm_shop_order cso ON (cror.orderID = cso.shopOrderID AND cror.relationType = 1)
         WHERE cdr.delFlag = '0' AND cror.delFlag = '0'
+        <if test="id != null and id != ''">
+            AND cdr.id = #{id}
+        </if>
         <if test="receiptType != null and receiptType != ''">
             AND cdr.receiptType = #{receiptType}
         </if>
@@ -322,5 +336,97 @@
         </if>
         ORDER BY cdr.receiptDate desc
     </select>
+    <select id="getReceiptDetail" resultType="com.caimei365.order.model.vo.ReceiptVo">
+        SELECT DISTINCT
+        cdr.id,
+        cdr.payWay,
+        cdr.payType,
+        cdr.receiptType,
+        cdr.receiptStatus,
+        cdr.receiptAmount,
+        cdr.smsMd5Code,
+        cdr.receiptDate,
+        cdr.confirmDate,
+        cdr.handlingFee,
+        cdr.orderFlag,
+        cru.name AS confirmUserName,
+        su.fullName AS cancelUserName,
+        CASE WHEN cror.relationType = 2 THEN co.organizeID
+        WHEN cror.relationType = 1 THEN cso.organizeID
+        ELSE '' END AS organizeId,
+        CASE WHEN cror.relationType = 2 THEN co.userID
+        WHEN cror.relationType = 1 THEN cso.userID
+        ELSE '' END AS userId,
+        IFNULL((
+        SELECT SUM(b.associateAmount) FROM cm_receipt_order_relation b WHERE b.receiptID = cdr.id AND b.delFlag = '0'
+        ), 0) AS associateAmount
+        FROM cm_discern_receipt cdr
+        LEFT JOIN cm_receipt_order_relation cror ON cror.receiptID = cdr.id
+        LEFT JOIN cm_receipt_user cru ON cru.id = cdr.confirmUserPermissionID
+        LEFT JOIN system_user su ON su.id = cdr.cancelUserPermissionID
+        LEFT JOIN cm_order co ON (cror.orderID = co.orderID AND cror.relationType = 2)
+        LEFT JOIN cm_shop_order cso ON (cror.orderID = cso.shopOrderID AND cror.relationType = 1)
+        WHERE cdr.delFlag = '0' AND cror.delFlag = '0' AND cdr.id = #{id}
+    </select>
+    <select id="getReceiptOrders" resultType="com.caimei365.order.model.vo.OrderVo">
+        SELECT
+        ifnull(o.orderSeen,0) AS orderSeen,
+        o.orderID AS orderId,
+        o.shopOrderIds,
+        o.orderSource,
+        o.orderNo,
+        o.userID AS userId,
+        o.clubID AS clubId,
+        o.buyUserID AS buyUserId,
+        o.orderTime AS orderTime,
+        o.updateDate AS updateDate,
+        o.delFlag,
+        o.userBeans,
+        o.orderType,
+        o.orderSubmitType,
+        o.confirmFlag,
+        o.onlinePayFlag,
+        o.splitFlag,
+        o.payFlag,
+        o.receiptStatus,
+        o.payStatus,
+        o.zeroCostFlag,
+        o.sendOutStatus,
+        o.refundType,
+        o.affirmPaymentFlag,
+        o.productCount,
+        o.presentCount,
+        o.promotionalGiftsCount,
+        o.hasActProduct,
+        o.promotionFullReduction,
+        o.svipFullReduction,
+        o.secondHandOrderFlag,
+        o.invoiceFlag,
+        o.freePostFlag AS postageFlag,
+        o.freight AS postage,
+        o.productTotalFee,
+        o.orderTotalFee,
+        o.payTotalFee,
+        o.payableAmount,
+        o.balancePayFee,
+        o.discountFee,
+        o.couponAmount,
+        o.status,
+        o.confirmTime,
+        o.payTime,
+        o.rebateFlag,
+        o.clauseID AS clauseId,
+        o.clauseName,
+        IFNULL(u.userName,'') AS userName
+        FROM cm_order o
+        INNER JOIN cm_receipt_order_relation cror ON o.orderID = cror.orderID
+        INNER JOIN cm_discern_receipt cdr ON cror.receiptID = cdr.id
+        LEFT JOIN USER u ON o.userID = u.userID
+        WHERE cdr.id = #{receiptId}
+            AND o.delFlag = '0'
+            AND cror.delFlag = '0'
+            AND cdr.delFlag = '0'
+        ORDER BY o.orderTime DESC
+    </select>
 
 </mapper>