Bläddra i källkod

财务管理接口-线下收款

chaoo 3 år sedan
förälder
incheckning
5566597a46

+ 39 - 3
src/main/java/com/caimei365/manager/controller/caimei/finance/FinanceApi.java

@@ -1,22 +1,58 @@
 package com.caimei365.manager.controller.caimei.finance;
 
+import com.caimei365.manager.entity.PaginationVo;
+import com.caimei365.manager.entity.ResponseJson;
+import com.caimei365.manager.entity.caimei.ReceiptDetail;
+import com.caimei365.manager.entity.caimei.ReceiptList;
+import com.caimei365.manager.entity.caimei.ReceiptParam;
+import com.caimei365.manager.entity.caimei.ReceiptType;
 import com.caimei365.manager.service.caimei.FinanceService;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.http.HttpHeaders;
+import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import java.util.List;
 
 /**
  * 财务管理接口
  *
+ *
  * @author Charles
  */
 @RestController
 @RequestMapping("/finance")
 public class FinanceApi {
 
-
     @Resource
     private FinanceService financeService;
 
+    /**
+     * 获取收款类型
+     */
+    @GetMapping("/receipt/type")
+    public ResponseJson<List<ReceiptType>> getReceiptType() {
+        return financeService.getReceiptType();
+    }
+
+    /**
+     * 获取收款列表
+     */
+    @GetMapping("/receipt/list")
+    public ResponseJson<PaginationVo<ReceiptList>> getReceiptList(ReceiptParam receiptParam,
+                                                                  @RequestParam(value = "pageNum", defaultValue = "1") int pageNum,
+                                                                  @RequestParam(value = "pageSize", defaultValue = "10") int pageSize) {
+        return financeService.getReceiptList(receiptParam, pageNum, pageSize);
+    }
+
+    /**
+     * 收款详情
+     */
+    @GetMapping("/receipt/detail")
+    public ResponseJson<ReceiptDetail> getReceiptDetail(Integer id) {
+        if (null == id) {
+            return ResponseJson.error("收款Id不能为空!", null);
+        }
+        return financeService.getReceiptDetail(id);
+    }
+
 }

+ 8 - 8
src/main/java/com/caimei365/manager/controller/caimei/finance/ReceiptUserApi.java

@@ -3,7 +3,7 @@ package com.caimei365.manager.controller.caimei.finance;
 import com.caimei365.manager.entity.ResponseJson;
 import com.caimei365.manager.entity.caimei.ReceiptPermission;
 import com.caimei365.manager.entity.caimei.ReceiptUser;
-import com.caimei365.manager.service.caimei.FinanceService;
+import com.caimei365.manager.service.caimei.ReceiptUserService;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
@@ -19,14 +19,14 @@ public class ReceiptUserApi {
 
 
     @Resource
-    private FinanceService financeService;
+    private ReceiptUserService receiptUserService;
 
     /**
      * 获取收款用户列表
      */
     @GetMapping("/receipt/users")
     public ResponseJson<List<ReceiptUser>> getReceiptUsers() {
-        return financeService.getReceiptUsers();
+        return receiptUserService.getReceiptUsers();
     }
 
     /**
@@ -34,7 +34,7 @@ public class ReceiptUserApi {
      */
     @GetMapping("/receipt/permissions")
     public ResponseJson<List<ReceiptPermission>> getReceiptPermissions() {
-        return financeService.getReceiptPermissions();
+        return receiptUserService.getReceiptPermissions();
     }
 
 
@@ -46,7 +46,7 @@ public class ReceiptUserApi {
         if (null == id || id <= 0) {
             return ResponseJson.error("收款用户Id不能为空!", null);
         }
-        return financeService.getReceiptUser(id);
+        return receiptUserService.getReceiptUser(id);
     }
 
     /**
@@ -54,7 +54,7 @@ public class ReceiptUserApi {
      */
     @PostMapping("/receipt/user/create")
     public ResponseJson<Void> addReceiptUser(@RequestBody ReceiptUser receiptUser) {
-        return financeService.addReceiptUser(receiptUser);
+        return receiptUserService.addReceiptUser(receiptUser);
     }
 
     /**
@@ -65,7 +65,7 @@ public class ReceiptUserApi {
         if (null == id || id <= 0) {
             return ResponseJson.error("收款用户Id不能为空!", null);
         }
-        return financeService.updateReceiptUser(id, receiptUser);
+        return receiptUserService.updateReceiptUser(id, receiptUser);
     }
 
     /**
@@ -76,7 +76,7 @@ public class ReceiptUserApi {
         if (null == id || id <= 0) {
             return ResponseJson.error("收款用户Id不能为空!", null);
         }
-        return financeService.deleteReceiptUser(id);
+        return receiptUserService.deleteReceiptUser(id);
     }
 
 }

+ 57 - 3
src/main/java/com/caimei365/manager/dao/FinanceDao.java

@@ -1,7 +1,6 @@
 package com.caimei365.manager.dao;
 
-import com.caimei365.manager.entity.caimei.ReceiptPermission;
-import com.caimei365.manager.entity.caimei.ReceiptUser;
+import com.caimei365.manager.entity.caimei.*;
 import org.apache.ibatis.annotations.Mapper;
 
 import java.util.List;
@@ -55,5 +54,60 @@ public interface FinanceDao {
      * 新增收款用户权限关联
      */
     void insertReceiptPermissionRelation(Integer userId, Integer permissionId);
-
+    /**
+     * 获取收款类型
+     */
+    List<ReceiptType> getReceiptType();
+    /**
+     * 获取收款列表
+     */
+    List<ReceiptList> getReceiptList(ReceiptParam receiptParam);
+    /**
+     * 收款详情
+     */
+    ReceiptDetail getReceiptDetail(Integer id);
+    /**
+     * 收款关联
+     */
+    List<ReceiptRelation> getReceiptRelations(Integer receiptId);
+    /**
+     * 收款子订单
+     */
+    ReceiptOrder getReceiptOrderByShopOrderId(Integer shopOrderId);
+    /**
+     * 收款主订单
+     */
+    ReceiptOrder getOrderInfoByOrderId(Integer orderId);
+    /**
+     * 供应商退款,已退金额
+     */
+    double getRefundAmountByShopOrder(Integer shopOrderId);
+    /**
+     * 根据订单Id获取收款记录
+     */
+    List<ReceiptRecord> getReceiptRecordByOrderId(Integer orderId);
+    /**
+     * 退款余额金额
+     */
+    double getReturnBalanceAmount(Integer receiptId);
+    /**
+     * 统计当前订单已收款
+     */
+    double getAssociateAmountByOrderId(Integer orderId);
+    /**
+     * 统计线下余额抵扣
+     */
+    Double sumUserMoney(Integer orderId);
+    /**
+     * 统计线上余额抵扣
+     */
+    Double sumOnlineMoney(Integer orderId);
+    /**
+     * 关联会员记录
+     */
+    ReceiptVipInfo getReceiptVipInfo(Integer receiptId);
+    /**
+     * 关联优惠券购买记录
+     */
+    ReceiptCouponInfo getReceiptCouponInfo(Integer receiptId);
 }

+ 38 - 0
src/main/java/com/caimei365/manager/entity/caimei/ReceiptCouponInfo.java

@@ -0,0 +1,38 @@
+package com.caimei365.manager.entity.caimei;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2022/3/16
+ */
+@Data
+public class ReceiptCouponInfo implements Serializable {
+    private static final long serialVersionUID = 1L;
+    /**
+     * 劵类型 0活动券 1品类券 2用户专享券 3店铺券 4新用户券
+     */
+    private Integer couponType;
+    /**
+     * 机构名称
+     */
+    private String clubName;
+    /**
+     * 收款时间
+     */
+    private String confirmDate;
+    /**
+     * 优惠满减条件金额
+     */
+    private String touchPrice;
+    /**
+     * 优惠券面值金额
+     */
+    private String couponAmount;
+
+    private String mbOrderId;
+}

+ 162 - 0
src/main/java/com/caimei365/manager/entity/caimei/ReceiptDetail.java

@@ -0,0 +1,162 @@
+package com.caimei365.manager.entity.caimei;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2022/3/15
+ */
+ @Data
+public class ReceiptDetail 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 payTypeText;
+    /**
+     * 收款款项类型:1订单款,2非订单款,3返佣款 4订单款或者非订单款(因财务阶段无法区分订单非订单), 5供应商退款
+     */
+    private Integer receiptType;
+    private String receiptTypeText;
+    /**
+     * 收款状态:1待确认、2已确认(待审核)、3审核通过、4审核未通过、5收款撤销【订单款项状态:12345】【非订单款项状态:125】【返佣款状态:125】【线上支付成功为审核通过】
+     */
+    private Integer receiptStatus;
+    private String receiptStatusText;
+    /**
+     * 收款金额(线上一次性付款和支付金额一致)
+     */
+    private Double receiptAmount;
+    /**
+     * 收款时间
+     */
+    private String receiptDate;
+    /**
+     * 确认时间
+     */
+    private String confirmDate;
+    /**
+     * 审核时间
+     */
+    private String reviewDate;
+    /**
+     * 撤销时间
+     */
+    private String cancelDate;
+    /**
+     * 撤销原因
+     */
+    private String cancelReason;
+    /**
+     * 审核不通过原因
+     */
+    private String reviewReason;
+    /**
+     * 非订单款说明
+     */
+    private String noOrderReason;
+    /**
+     * 单次收款金额
+     */
+    private Double associateAmount;
+    /**
+     * 短信内容
+     */
+    private String smsContent;
+    /**
+     * 短信内容Md5加密串(适用于二次短信匹配查询)
+     */
+    private String smsMd5Code;
+    /**
+     * 确认订单类型:1小额抹平确认,2大额抹平确认,3大额退款余额,4确认关联
+     */
+    private Integer confirmType;
+    /**
+     * 是否存在手续费
+     */
+    private Boolean haveFee;
+    /**
+     * 手续费
+     */
+    private Double handlingFee;
+    /**
+     * 订单标识
+     */
+    private String orderFlag;
+    /**
+     * 当前识别短信是否已经识别存在系统。0新短信可以识别,1已经存在识别短信。
+     */
+    private String smsContentPresenceFlag;
+    /**
+     * 自动审核收款标记(0手动分享去确认审核,1收款直接确认并审核[适用星范带有正确订单标识的收款])
+     */
+    private String autoAuditFlag;
+    /**
+     * 订单组织ID
+     */
+    private Integer organizeId;
+    /**
+     * 提示信息
+     */
+    private String tipMsg;
+    /**
+     * 订单机构用户ID
+     */
+    private Integer userId;
+    /**
+     * 订单机构客户名称
+     */
+    private String userName;
+    /**
+     * 关联订单
+     */
+    private List<ReceiptOrder> orderInfos;
+    /**
+     * 关联会员记录
+     */
+    private ReceiptVipInfo vipInfo;
+    /**
+     * 关联优惠券购买记录
+     */
+    private ReceiptCouponInfo couponInfo;
+    /**
+     * 收款人
+     */
+    private Integer receiptUserPermissionId;
+    private String receiptUserName;
+    /**
+     * 确认人
+     */
+    private Integer confirmUserPermissionId;
+    private String confirmUserName;
+    /**
+     * 审核人
+     */
+    private Integer reviewUserPermissionId;
+    private String reviewUserName;
+    /**
+     * 撤销人
+     */
+    private Integer cancelUserPermissionId;
+    private String cancelUserName;
+
+
+    /**
+     * 判断订单中抹平的订单是否是和多个订单一起支付的
+     */
+    private boolean receiptOrderFlag;
+}

+ 61 - 0
src/main/java/com/caimei365/manager/entity/caimei/ReceiptList.java

@@ -0,0 +1,61 @@
+package com.caimei365.manager.entity.caimei;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2022/3/15
+ */
+ @Data
+public class ReceiptList implements Serializable {
+    private static final long serialVersionUID = 1L;
+    /**
+     * 收款Id
+     */
+    private Integer id;
+    /**
+     * 收款时间
+     */
+    private String receiptDate;
+    /**
+     * 收款金额(线上一次性付款和支付金额一致)
+     */
+    private String receiptAmount;
+    /**
+     * 用户付款方式:1线上,2线下
+     */
+    private String payWay;
+    /**
+     * 付款类型:1建设银行7297、2广发银行0115、3中信银行7172、4中信银行0897、5中信银行0897-财付通、6中信银行0897-支付宝、7线上-支付宝、8线上-微信支付、9线上-快钱支付,10口头返佣,11广发5461
+     */
+    private String payType;
+    /**
+     * 1订单款,2非订单款,3返佣款,5供应商退款,6超级会员款,7二手商品上架费
+     */
+    private String receiptType;
+    /**
+     * 收款状态:1待确认、2已确认(待审核)、3审核通过、4审核未通过、5收款撤销、6待返佣、7已返佣【线上支付成功为审核通过】
+     */
+    private String receiptStatus;
+    /**
+     * 关联订单类型  与 关联订单号一一对应 "0协销"/"1自主"
+     */
+    private String orderType;
+    /**
+     * 关联订单号
+     */
+    private String orders;
+    /**
+     * 客户名称
+     */
+    private String userName;
+    /**
+     * 客户名称后缀,如:星范,呵呵商城
+     */
+    private String suffix;
+
+}

+ 94 - 0
src/main/java/com/caimei365/manager/entity/caimei/ReceiptOrder.java

@@ -0,0 +1,94 @@
+package com.caimei365.manager.entity.caimei;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2022/3/16
+ */
+ @Data
+public class ReceiptOrder implements Serializable {
+    private static final long serialVersionUID = 1L;
+    /**
+     * 订单Id
+     */
+    private Integer orderId;
+    /**
+     * 订单编号
+     */
+    private String orderNo;
+    /**
+     * 组织id
+     */
+    private Integer organizeId;
+    /**
+     * 订单金额
+     */
+    private Double orderAmount;
+    /**
+     * 已收金额
+     */
+    private Double receiptAmount;
+    /**
+     * 客户名称
+     */
+    private String customerName;
+    /**
+     * (收款买家)收款状态:1待收款、2部分收款、3已收款
+     */
+    private Integer receiptStatus;
+    /**
+     * 订单类型 协销订单 0 普通订单 1
+     */
+    private Integer orderType;
+    /**
+     * 下单时间
+     */
+    private String orderTime;
+    /**
+     * 关系类型:1返佣订单(返佣款或供应商退款)、2非返佣订单(订单款或者非订单款)、3超级会员款
+     */
+    private Integer relationType;
+    /**
+     * 订单用户id
+     */
+    private Integer userId;
+    /**
+     * 返佣款项   是根据子订单再去关联的主订单
+     */
+    private String shopOrderNo;
+    private Integer shopOrderId;
+    /**
+     * 子订单金额
+     */
+    private Double shopOrderAmount;
+    /**
+     * 供应商
+     */
+    private String shopName;
+
+    private Double payableAmount;
+    /**
+     * 判断订单中抹平的订单是否是和多个订单一起支付的
+     */
+    private boolean receiptOrderFlag;
+    /**
+     * 应付金额
+     */
+    private Double shouldPayShopAmount;
+    /**
+     * 已付供应商金额
+     */
+    private Double payedShopAmount;
+    /**
+     * 已退款供应商金额
+     */
+    private Double refundsAmount;
+
+    private List<ReceiptRecord> receiptRecords;
+}

+ 72 - 0
src/main/java/com/caimei365/manager/entity/caimei/ReceiptParam.java

@@ -0,0 +1,72 @@
+package com.caimei365.manager.entity.caimei;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2022/3/15
+ */
+@Data
+public class ReceiptParam implements Serializable {
+    private static final long serialVersionUID = 1L;
+    /**
+     * 收款Id
+     */
+    private Integer id;
+    /**
+     * 用户付款方式:1线上,2线下
+     */
+    private String payWay;
+    /**
+     * 付款类型:1建设银行7297、2广发银行0115、3中信银行7172、4中信银行0897、5中信银行0897-财付通、6中信银行0897-支付宝、7线上-支付宝、8线上-微信支付、9线上-快钱支付,10口头返佣,11广发5461
+     */
+    private String payType;
+    /**
+     * 1订单款,2非订单款,3返佣款,5供应商退款,6超级会员款,7二手商品上架费
+     */
+    private String receiptType;
+    /**
+     * 收款状态:1待确认、2已确认(待审核)、3审核通过、4审核未通过、5收款撤销、6待返佣、7已返佣【线上支付成功为审核通过】
+     */
+    private String receiptStatus;
+    /**
+     * 时间开始 查询条件 收款时间
+     */
+    private String startTime;
+    /**
+     * 时间结束  查询条件 收款时间
+     */
+    private String endTime;
+    /**
+     * 组织id
+     */
+    private Integer organizeId;
+    /**
+     * 查询用 订单编号
+     */
+    private String orderNo;
+    /**
+     * 查询用 订单ID
+     */
+    private String orderId;
+    /**
+     * 收款进度  1待收  2部分收  3全收
+     */
+    private String receiptProgress;
+    /**
+     * 订单类型  协销订单0, 普通订单1
+     */
+    private String receiptOrderType;
+    /**
+     * 关联数量  1单个  2多个
+     */
+    private String associationNum;
+    /**
+     * 客户名称
+     */
+    private String userName;
+}

+ 110 - 0
src/main/java/com/caimei365/manager/entity/caimei/ReceiptRecord.java

@@ -0,0 +1,110 @@
+package com.caimei365.manager.entity.caimei;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2022/3/16
+ */
+@Data
+public class ReceiptRecord implements Serializable {
+    private static final long serialVersionUID = 1L;
+    /**
+     * 识别款项Id(对应cm_discern_receipt表)
+     */
+    private Integer receiptId;
+    /**
+     * 收款时间
+     */
+    private String receiptTime;
+    /**
+     * 付款类型:1建设银行7297、2广发银行0115、3中信银行7172、4中信银行0897、5中信银行0897-财付通、6中信银行0897-支付宝、7线上-支付宝、8线上-微信支付、9线上-快钱支付、10口头返佣',0 余额抵扣
+     */
+    private Integer payType;
+    /**
+     * 收款金额
+     */
+    private Double receiptAmount;
+    /**
+     * 用户付款方式:1线上,2线下
+     */
+    private Integer payWay;
+    /**
+     * 交易号--[线上字段]
+     */
+    private String transactionNum;
+    /**
+     * 确认人权限Id(对应cm_receipt_user表)
+     */
+    private Integer confirmUserPermissionId;
+    /**
+     * 确认人名称
+     */
+    private String confirmUserName;
+    /**
+     * 审核人权限Id(对应cm_receipt_user表)
+     */
+    private Integer reviewUserPermissionId;
+    /**
+     * 审核人名称
+     */
+    private String reviewUserName;
+    /**
+     * 确认时间
+     */
+    private String confirmDate;
+    /**
+     * 审核时间
+     */
+    private String reviewDate;
+    /**
+     * 收款状态
+     */
+    private Integer receiptStatus;
+    /**
+     * 收款款项类型:1订单款,2非订单款,3返佣款
+     */
+    private Integer receiptType;
+    /**
+     * 撤销人后台用户系统userId
+     */
+    private Integer cancelUserPermissionId;
+    /**
+     * 撤销人名称
+     */
+    private String cancelUserName;
+    /**
+     * 撤销原因
+     */
+    private String cancelReason;
+    /**
+     * 撤销时间
+     */
+    private String cancelDate;
+    /**
+     * 确认类型
+     */
+    private Integer confirmType;
+    /**
+     * 订单已收金额(此收款只计算线上线下收款记录表金额)
+     */
+    private Double orderReceivedAmount;
+    /**
+     * 退款余额金额
+     */
+    private Double returnBalanceAmount;
+    /**
+     * 订单关联方式: 1手动 2自动
+     */
+    private Integer associationType;
+    private Double userMoney;
+    private Double onlineMoney;
+    /**
+     * 米花科技平台唯一流水号
+     */
+    private String mbOrderId;
+}

+ 36 - 0
src/main/java/com/caimei365/manager/entity/caimei/ReceiptRelation.java

@@ -0,0 +1,36 @@
+package com.caimei365.manager.entity.caimei;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2022/3/16
+ */
+@Data
+public class ReceiptRelation implements Serializable {
+    private static final long serialVersionUID = 1L;
+    /**
+     * 收款项和订单关系表id
+     */
+    private Integer id;
+    /**
+     * 关系类型:1返佣订单(返佣款)、2非返佣订单(订单款或者非订单款)、3超级会员款、4二手商品上架费,5认证通会员款
+     */
+    private Integer relationType;
+    /**
+     * 识别款项Id(对应cm_discern_receipt表)
+     */
+    private Integer receiptId;
+    /**
+     * 关联金额:1普通收款(线下):收款具体对该应母订单的收金额、2线上支付:付款金额就等于该金额、3返佣收款:默认为0
+     */
+    private Double associateAmount;
+    /**
+     * 订单Id(relationType值为1是为子订单ID,为2时为主订单ID)
+     */
+    private Integer orderId;
+}

+ 24 - 0
src/main/java/com/caimei365/manager/entity/caimei/ReceiptType.java

@@ -0,0 +1,24 @@
+package com.caimei365.manager.entity.caimei;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2022/3/15
+ */
+@Data
+public class ReceiptType implements Serializable {
+    private static final long serialVersionUID = 1L;
+    /**
+     * 收款类型Id
+     */
+    private Integer id;
+    /**
+     * 收款类型
+     */
+    private String type;
+}

+ 57 - 0
src/main/java/com/caimei365/manager/entity/caimei/ReceiptVipInfo.java

@@ -0,0 +1,57 @@
+package com.caimei365.manager.entity.caimei;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2022/3/16
+ */
+@Data
+public class ReceiptVipInfo implements Serializable {
+    private static final long serialVersionUID = 1L;
+    /**
+     * 记录Id
+     */
+    private Integer id;
+    /**
+     * 用户Id
+     */
+    private Integer userId;
+    /**
+     * Vip套餐Id
+     */
+    private Integer packageId;
+    /**
+     * 开始时间
+     */
+    private Date beginTime;
+    /**
+     * 结束时间
+     */
+    private Date endTime;
+    /**
+     * 套餐时长(月)
+     */
+    private Integer duration;
+    /**
+     * 支付金额
+     */
+    private Double price;
+    /**
+     * 支付时间
+     */
+    private Date payTime;
+    /**
+     * 购买机构名称
+     */
+    private String clubName;
+    /**
+     * 商户唯一订单请求号(订单编号#随机时间戳)
+     */
+    private String orderRequestNo;
+}

+ 12 - 26
src/main/java/com/caimei365/manager/service/caimei/FinanceService.java

@@ -1,8 +1,11 @@
 package com.caimei365.manager.service.caimei;
 
+import com.caimei365.manager.entity.PaginationVo;
 import com.caimei365.manager.entity.ResponseJson;
-import com.caimei365.manager.entity.caimei.ReceiptPermission;
-import com.caimei365.manager.entity.caimei.ReceiptUser;
+import com.caimei365.manager.entity.caimei.ReceiptDetail;
+import com.caimei365.manager.entity.caimei.ReceiptList;
+import com.caimei365.manager.entity.caimei.ReceiptParam;
+import com.caimei365.manager.entity.caimei.ReceiptType;
 
 import java.util.List;
 
@@ -10,39 +13,22 @@ import java.util.List;
  * Description
  *
  * @author : Charles
- * @date : 2022/2/23
+ * @date : 2022/3/15
  */
 public interface FinanceService {
-    /**
-     * 获取收款用户列表
-     */
-    ResponseJson<List<ReceiptUser>> getReceiptUsers();
-
-    /**
-     * 获取收款权限列表
-     */
-    ResponseJson<List<ReceiptPermission>> getReceiptPermissions();
 
     /**
-     * 根据ID获取收款用户
-     * @param id 收款用户Id
+     * 获取收款类型
      */
-    ResponseJson<ReceiptUser> getReceiptUser(Integer id);
+    ResponseJson<List<ReceiptType>> getReceiptType();
 
     /**
-     * 添加收款用户
+     * 获取收款列表
      */
-    ResponseJson<Void> addReceiptUser(ReceiptUser receiptUser);
+    ResponseJson<PaginationVo<ReceiptList>> getReceiptList(ReceiptParam receiptParam, int pageNum, int pageSize);
 
     /**
-     * 根据ID更新用户
-     * @param id 收款用户Id
+     * 收款详情
      */
-    ResponseJson<Void> updateReceiptUser(Integer id, ReceiptUser receiptUser);
-
-    /**
-     * 根据ID删除收款用户
-     */
-    ResponseJson<Void> deleteReceiptUser(Integer id);
-
+    ResponseJson<ReceiptDetail> getReceiptDetail(Integer id);
 }

+ 48 - 0
src/main/java/com/caimei365/manager/service/caimei/ReceiptUserService.java

@@ -0,0 +1,48 @@
+package com.caimei365.manager.service.caimei;
+
+import com.caimei365.manager.entity.ResponseJson;
+import com.caimei365.manager.entity.caimei.ReceiptPermission;
+import com.caimei365.manager.entity.caimei.ReceiptUser;
+
+import java.util.List;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2022/2/23
+ */
+public interface ReceiptUserService {
+    /**
+     * 获取收款用户列表
+     */
+    ResponseJson<List<ReceiptUser>> getReceiptUsers();
+
+    /**
+     * 获取收款权限列表
+     */
+    ResponseJson<List<ReceiptPermission>> getReceiptPermissions();
+
+    /**
+     * 根据ID获取收款用户
+     * @param id 收款用户Id
+     */
+    ResponseJson<ReceiptUser> getReceiptUser(Integer id);
+
+    /**
+     * 添加收款用户
+     */
+    ResponseJson<Void> addReceiptUser(ReceiptUser receiptUser);
+
+    /**
+     * 根据ID更新用户
+     * @param id 收款用户Id
+     */
+    ResponseJson<Void> updateReceiptUser(Integer id, ReceiptUser receiptUser);
+
+    /**
+     * 根据ID删除收款用户
+     */
+    ResponseJson<Void> deleteReceiptUser(Integer id);
+
+}

+ 87 - 180
src/main/java/com/caimei365/manager/service/caimei/impl/FinanceServiceImpl.java

@@ -1,230 +1,137 @@
 package com.caimei365.manager.service.caimei.impl;
 
 import com.caimei365.manager.dao.FinanceDao;
+import com.caimei365.manager.entity.PaginationVo;
 import com.caimei365.manager.entity.ResponseJson;
-import com.caimei365.manager.entity.caimei.ReceiptPermission;
-import com.caimei365.manager.entity.caimei.ReceiptUser;
-import com.caimei365.manager.entity.sys.SysRole;
+import com.caimei365.manager.entity.caimei.*;
 import com.caimei365.manager.service.caimei.FinanceService;
-import com.caimei365.manager.utils.CommonUtil;
+import com.github.pagehelper.PageHelper;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
 
 import javax.annotation.Resource;
-import java.nio.charset.StandardCharsets;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Objects;
 
 /**
  * Description
  *
  * @author : Charles
- * @date : 2022/2/23
+ * @date : 2022/3/15
  */
-@Slf4j
+ @Slf4j
 @Service
 public class FinanceServiceImpl implements FinanceService {
     @Resource
     private FinanceDao financeDao;
 
     /**
-     * 获取收款用户列表
+     * 获取收款类型
      */
     @Override
-    public ResponseJson<List<ReceiptUser>> getReceiptUsers() {
-        List<ReceiptUser> list = financeDao.getReceiptUsers();
-        list.removeIf(Objects::isNull);
-        for (ReceiptUser user : list) {
-            setUserPermissions(user);
-        }
+    public ResponseJson<List<ReceiptType>> getReceiptType() {
+        List<ReceiptType> list = financeDao.getReceiptType();
         return ResponseJson.success(list);
     }
 
     /**
-     * 获取收款权限列表
-     */
-    @Override
-    public ResponseJson<List<ReceiptPermission>> getReceiptPermissions() {
-        List<ReceiptPermission> permissions = financeDao.getReceiptPermissions();
-        return ResponseJson.success(permissions);
-    }
-
-    /**
-     * 根据ID获取收款用户
-     *
-     * @param id 收款用户Id
-     */
-    @Override
-    public ResponseJson<ReceiptUser> getReceiptUser(Integer id) {
-        ReceiptUser user = financeDao.getReceiptUserById(id);
-        setUserPermissions(user);
-        return ResponseJson.success(user);
-    }
-
-    /**
-     * 添加收款用户
+     * 获取收款列表
      */
-    @Transactional(rollbackFor=Exception.class)
     @Override
-    public ResponseJson<Void> addReceiptUser(ReceiptUser receiptUser) {
-        if (!StringUtils.hasLength(receiptUser.getMobile())){
-            return ResponseJson.error("收款人手机号不能为空!", null);
-        }
-        if (!StringUtils.hasLength(receiptUser.getPassword())){
-            return ResponseJson.error("收款人密码不能为空!", null);
-        }
-        if (!StringUtils.hasLength(receiptUser.getName())){
-            return ResponseJson.error("收款人姓名不能为空!", null);
-        }
-        if (null == receiptUser.getUserType() || receiptUser.getUserType() <= 0){
-            return ResponseJson.error("收款人用户类型不能为空!", null);
-        }
-        try {
-            // 密码加密
-            String encodePassword = encodeReceiptPassword(receiptUser.getPassword());
-            receiptUser.setPassword(encodePassword);
-        } catch (NoSuchAlgorithmException e) {
-            log.error("收款用户密码加密异常:", e);
-            return ResponseJson.error("收款用户密码加密异常!", null);
+    public ResponseJson<PaginationVo<ReceiptList>> getReceiptList(ReceiptParam receiptParam, int pageNum, int pageSize) {
+        if (StringUtils.hasLength(receiptParam.getStartTime())) {
+            String startTime = receiptParam.getStartTime().substring(0, 10) + " 00:00:00";
+            receiptParam.setStartTime(startTime);
         }
-        // 查询是否存在当前手机号的用户
-        ReceiptUser dbUser = financeDao.getReceiptUserByMobile(receiptUser.getMobile());
-        if (null == dbUser) {
-            // 新增收款用户返回用户Id
-            financeDao.insertReceiptUser(receiptUser);
-            // 保存用户权限关系
-            saveReceiptPermissionRelation(receiptUser.getId(), receiptUser.getPermissionIds());
-            return ResponseJson.success("添加收款用户成功", null);
-        } else if (null != dbUser.getDelFlag() && 0 != dbUser.getDelFlag()){
-            // 更新已删除用户
-            return updateReceiptUser(dbUser.getId(), receiptUser);
-        } else {
-            return ResponseJson.error("用户手机号已存在!", null);
+        if (StringUtils.hasLength(receiptParam.getEndTime())) {
+            String endTime = receiptParam.getEndTime().substring(0, 10) + " 23:59:59";
+            receiptParam.setEndTime(endTime);
         }
+        PageHelper.startPage(pageNum, pageSize);
+        List<ReceiptList> receiptList = financeDao.getReceiptList(receiptParam);
+        PaginationVo<ReceiptList> pageData = new PaginationVo<>(receiptList);
+        return ResponseJson.success(pageData);
     }
 
     /**
-     * 根据ID更新用户
-     *
-     * @param id          收款用户Id
+     * 收款详情
      */
-    @Transactional(rollbackFor=Exception.class)
     @Override
-    public ResponseJson<Void> updateReceiptUser(Integer id, ReceiptUser receiptUser) {
-        receiptUser.setId(id);
-        receiptUser.setDelFlag(0);
-        if (StringUtils.hasLength(receiptUser.getPassword())){
-            String encodePassword = null;
-            try {
-                // 密码加密
-                encodePassword = encodeReceiptPassword(receiptUser.getPassword());
-            } catch (NoSuchAlgorithmException e) {
-                log.error("收款用户密码加密异常:", e);
-                return ResponseJson.error("收款用户密码加密异常!", null);
-            }
-            receiptUser.setPassword(encodePassword);
+    public ResponseJson<ReceiptDetail> getReceiptDetail(Integer id) {
+        ReceiptDetail receipt = financeDao.getReceiptDetail(id);
+        List<ReceiptRelation> relations = financeDao.getReceiptRelations(id);
+        if (!CollectionUtils.isEmpty(relations) && relations.size() > 1) {
+            receipt.setReceiptOrderFlag(true);
         }
-        financeDao.updateReceiptUser(receiptUser);
-        // 删除原有权限关联
-        financeDao.deleteReceiptPermissionRelation(id);
-        // 保存用户权限关系
-        saveReceiptPermissionRelation(id, receiptUser.getPermissionIds());
-        return ResponseJson.success();
-    }
-
-
-
-    /**
-     * 根据ID删除收款用户
-     *
-     * @param id
-     */
-    @Override
-    public ResponseJson<Void> deleteReceiptUser(Integer id) {
-        // 删除原有权限关联
-        financeDao.deleteReceiptPermissionRelation(id);
-        // 删除收款用户
-        financeDao.deleteReceiptUser(id);
-        return ResponseJson.success();
-    }
-
-    /**
-     * 保存角色菜单关系
-     */
-    private void saveReceiptPermissionRelation(Integer userId, String permissionIds) {
-        if (StringUtils.hasLength(permissionIds)) {
-            // 删除原有权限关联
-            financeDao.deleteReceiptPermissionRelation(userId);
-            // 设置权限
-            String[] split = permissionIds.split(",");
-            for (String s : split) {
-                if (StringUtils.hasLength(s)) {
-                    financeDao.insertReceiptPermissionRelation(userId, Integer.valueOf(s));
+        // 一个收款可能会关联了一个或多个订单
+        List<ReceiptOrder> orderInfos = new ArrayList<>();
+        for (ReceiptRelation relation : relations) {
+            ReceiptOrder roi = null;
+            if (2 == relation.getRelationType() {
+                // relationType==2时,orderId为主订单Id
+                roi = financeDao.getOrderInfoByOrderId(relation.getOrderId());
+            }
+            if (1 == relation.getRelationType()) {
+                // relationType==1时,orderId为子订单Id
+                roi = financeDao.getReceiptOrderByShopOrderId(relation.getOrderId());
+                if (null != roi) {
+                    if (5 == receipt.getReceiptType()) {
+                        // 供应商退款,已退金额
+                        double refundAmount = financeDao.getRefundAmountByShopOrder(roi.getShopOrderId());
+                        roi.setRefundsAmount(refundAmount);
+                    }
                 }
             }
-        }
-    }
-
-    /**
-     * MD5加密
-     * @param password 待加密字段
-     * @return encodePassword
-     * @throws NoSuchAlgorithmException
-     */
-    private String encodeReceiptPassword(String password) throws NoSuchAlgorithmException {
-        if (StringUtils.hasLength(password)){
-            MessageDigest md = MessageDigest.getInstance("MD5");
-            //通过digest方法返回哈希计算后的字节数组
-            byte[] bytes = md.digest(password.getBytes(StandardCharsets.UTF_8));
-            //将字节数组转换为16进制字符串并返回
-            final char[] hex = "0123456789ABCDEF".toCharArray();
-            StringBuilder ret = new StringBuilder(bytes.length * 2);
-            for (byte aByte : bytes) {
-                ret.append(hex[(aByte >> 4) & 0x0f]);
-                ret.append(hex[aByte & 0x0f]);
+            if (null != roi) {
+                roi.setRelationType(relation.getRelationType());
+                // 根据订单Id获取收款记录
+                List<ReceiptRecord> recordList = financeDao.getReceiptRecordByOrderId(roi.getOrderId());
+                // 暂时不启用抹平明细
+                if (!CollectionUtils.isEmpty(recordList)) {
+                    for (ReceiptRecord record : recordList) {
+                        if (3 == record.getConfirmType()) {
+                            double returnBalanceAmount = financeDao.getReturnBalanceAmount(record.getReceiptId());
+                            record.setReturnBalanceAmount(returnBalanceAmount);
+                        }
+                        // 统计当前已收
+                        double associateAmount = financeDao.getAssociateAmountByOrderId(roi.getOrderId());
+                        record.setOrderReceivedAmount(associateAmount);
+                        if (16 == receipt.getPayType()) {
+                            Double userMoney = financeDao.sumUserMoney(roi.getOrderId());
+                            Double onlineMoney = financeDao.sumOnlineMoney(roi.getOrderId());
+                            if (null == onlineMoney) {
+                                record.setOnlineMoney(0d);
+                            } else {
+                                record.setOnlineMoney(onlineMoney);
+                            }
+                            if (null == userMoney) {
+                                record.setUserMoney(0d);
+                            } else {
+                                record.setUserMoney(userMoney);
+                            }
+                        }
+                    }
+                }
+                //一个订单又包含了多个收款记录
+                roi.setReceiptRecords(recordList);
+                orderInfos.add(roi);
             }
-            return ret.toString();
         }
-        return "";
-    }
+        receipt.setOrderInfos(orderInfos);
 
-    /**
-     * 设置收款用户类型和权限列表
-     */
-    private void setUserPermissions(ReceiptUser user) {
-        switch(user.getUserType()) {
-            case 1 :
-                user.setUserTypeText("协销");
-                break;
-            case 2 :
-                user.setUserTypeText("客服");
-                break;
-            case 3 :
-                user.setUserTypeText("财务");
-                break;
-            case 4 :
-                user.setUserTypeText("超级管理员");
-                break;
-            default :
-                user.setUserTypeText("");
+        if (6 == receipt.getReceiptType()) {
+            // 3超级会员款
+            ReceiptVipInfo receiptVipInfo = financeDao.getReceiptVipInfo(receipt.getId());
+            receipt.setVipInfo(receiptVipInfo);
         }
-        List<ReceiptPermission> permissions = financeDao.getReceiptPermissionsByUserId(user.getId());
-        user.setPermissions(permissions);
-        List<Integer> permissionIdList = new ArrayList<>();
-        if (!CollectionUtils.isEmpty(permissions)) {
-            for (ReceiptPermission item : permissions) {
-                if (null != item) {
-                    permissionIdList.add(item.getId());
-                }
-            }
+        if (8 == receipt.getReceiptType()) {
+            //优惠券购买费
+            ReceiptCouponInfo couponInfo = financeDao.getReceiptCouponInfo(receipt.getId());
+            receipt.setCouponInfo(couponInfo);
         }
-        String permissionIds = CommonUtil.idListToString(permissionIdList, ",");
-        user.setPermissionIds(permissionIds);
+
+        return ResponseJson.success(receipt);
     }
 }

+ 229 - 0
src/main/java/com/caimei365/manager/service/caimei/impl/ReceiptUserServiceImpl.java

@@ -0,0 +1,229 @@
+package com.caimei365.manager.service.caimei.impl;
+
+import com.caimei365.manager.dao.FinanceDao;
+import com.caimei365.manager.entity.ResponseJson;
+import com.caimei365.manager.entity.caimei.ReceiptPermission;
+import com.caimei365.manager.entity.caimei.ReceiptUser;
+import com.caimei365.manager.service.caimei.ReceiptUserService;
+import com.caimei365.manager.utils.CommonUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
+
+import javax.annotation.Resource;
+import java.nio.charset.StandardCharsets;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2022/2/23
+ */
+@Slf4j
+@Service
+public class ReceiptUserServiceImpl implements ReceiptUserService {
+    @Resource
+    private FinanceDao financeDao;
+
+    /**
+     * 获取收款用户列表
+     */
+    @Override
+    public ResponseJson<List<ReceiptUser>> getReceiptUsers() {
+        List<ReceiptUser> list = financeDao.getReceiptUsers();
+        list.removeIf(Objects::isNull);
+        for (ReceiptUser user : list) {
+            setUserPermissions(user);
+        }
+        return ResponseJson.success(list);
+    }
+
+    /**
+     * 获取收款权限列表
+     */
+    @Override
+    public ResponseJson<List<ReceiptPermission>> getReceiptPermissions() {
+        List<ReceiptPermission> permissions = financeDao.getReceiptPermissions();
+        return ResponseJson.success(permissions);
+    }
+
+    /**
+     * 根据ID获取收款用户
+     *
+     * @param id 收款用户Id
+     */
+    @Override
+    public ResponseJson<ReceiptUser> getReceiptUser(Integer id) {
+        ReceiptUser user = financeDao.getReceiptUserById(id);
+        setUserPermissions(user);
+        return ResponseJson.success(user);
+    }
+
+    /**
+     * 添加收款用户
+     */
+    @Transactional(rollbackFor=Exception.class)
+    @Override
+    public ResponseJson<Void> addReceiptUser(ReceiptUser receiptUser) {
+        if (!StringUtils.hasLength(receiptUser.getMobile())){
+            return ResponseJson.error("收款人手机号不能为空!", null);
+        }
+        if (!StringUtils.hasLength(receiptUser.getPassword())){
+            return ResponseJson.error("收款人密码不能为空!", null);
+        }
+        if (!StringUtils.hasLength(receiptUser.getName())){
+            return ResponseJson.error("收款人姓名不能为空!", null);
+        }
+        if (null == receiptUser.getUserType() || receiptUser.getUserType() <= 0){
+            return ResponseJson.error("收款人用户类型不能为空!", null);
+        }
+        try {
+            // 密码加密
+            String encodePassword = encodeReceiptPassword(receiptUser.getPassword());
+            receiptUser.setPassword(encodePassword);
+        } catch (NoSuchAlgorithmException e) {
+            log.error("收款用户密码加密异常:", e);
+            return ResponseJson.error("收款用户密码加密异常!", null);
+        }
+        // 查询是否存在当前手机号的用户
+        ReceiptUser dbUser = financeDao.getReceiptUserByMobile(receiptUser.getMobile());
+        if (null == dbUser) {
+            // 新增收款用户返回用户Id
+            financeDao.insertReceiptUser(receiptUser);
+            // 保存用户权限关系
+            saveReceiptPermissionRelation(receiptUser.getId(), receiptUser.getPermissionIds());
+            return ResponseJson.success("添加收款用户成功", null);
+        } else if (null != dbUser.getDelFlag() && 0 != dbUser.getDelFlag()){
+            // 更新已删除用户
+            return updateReceiptUser(dbUser.getId(), receiptUser);
+        } else {
+            return ResponseJson.error("用户手机号已存在!", null);
+        }
+    }
+
+    /**
+     * 根据ID更新用户
+     *
+     * @param id          收款用户Id
+     */
+    @Transactional(rollbackFor=Exception.class)
+    @Override
+    public ResponseJson<Void> updateReceiptUser(Integer id, ReceiptUser receiptUser) {
+        receiptUser.setId(id);
+        receiptUser.setDelFlag(0);
+        if (StringUtils.hasLength(receiptUser.getPassword())){
+            String encodePassword = null;
+            try {
+                // 密码加密
+                encodePassword = encodeReceiptPassword(receiptUser.getPassword());
+            } catch (NoSuchAlgorithmException e) {
+                log.error("收款用户密码加密异常:", e);
+                return ResponseJson.error("收款用户密码加密异常!", null);
+            }
+            receiptUser.setPassword(encodePassword);
+        }
+        financeDao.updateReceiptUser(receiptUser);
+        // 删除原有权限关联
+        financeDao.deleteReceiptPermissionRelation(id);
+        // 保存用户权限关系
+        saveReceiptPermissionRelation(id, receiptUser.getPermissionIds());
+        return ResponseJson.success();
+    }
+
+
+
+    /**
+     * 根据ID删除收款用户
+     *
+     * @param id
+     */
+    @Override
+    public ResponseJson<Void> deleteReceiptUser(Integer id) {
+        // 删除原有权限关联
+        financeDao.deleteReceiptPermissionRelation(id);
+        // 删除收款用户
+        financeDao.deleteReceiptUser(id);
+        return ResponseJson.success();
+    }
+
+    /**
+     * 保存角色菜单关系
+     */
+    private void saveReceiptPermissionRelation(Integer userId, String permissionIds) {
+        if (StringUtils.hasLength(permissionIds)) {
+            // 删除原有权限关联
+            financeDao.deleteReceiptPermissionRelation(userId);
+            // 设置权限
+            String[] split = permissionIds.split(",");
+            for (String s : split) {
+                if (StringUtils.hasLength(s)) {
+                    financeDao.insertReceiptPermissionRelation(userId, Integer.valueOf(s));
+                }
+            }
+        }
+    }
+
+    /**
+     * MD5加密
+     * @param password 待加密字段
+     * @return encodePassword
+     * @throws NoSuchAlgorithmException
+     */
+    private String encodeReceiptPassword(String password) throws NoSuchAlgorithmException {
+        if (StringUtils.hasLength(password)){
+            MessageDigest md = MessageDigest.getInstance("MD5");
+            //通过digest方法返回哈希计算后的字节数组
+            byte[] bytes = md.digest(password.getBytes(StandardCharsets.UTF_8));
+            //将字节数组转换为16进制字符串并返回
+            final char[] hex = "0123456789ABCDEF".toCharArray();
+            StringBuilder ret = new StringBuilder(bytes.length * 2);
+            for (byte aByte : bytes) {
+                ret.append(hex[(aByte >> 4) & 0x0f]);
+                ret.append(hex[aByte & 0x0f]);
+            }
+            return ret.toString();
+        }
+        return "";
+    }
+
+    /**
+     * 设置收款用户类型和权限列表
+     */
+    private void setUserPermissions(ReceiptUser user) {
+        switch(user.getUserType()) {
+            case 1 :
+                user.setUserTypeText("协销");
+                break;
+            case 2 :
+                user.setUserTypeText("客服");
+                break;
+            case 3 :
+                user.setUserTypeText("财务");
+                break;
+            case 4 :
+                user.setUserTypeText("超级管理员");
+                break;
+            default :
+                user.setUserTypeText("");
+        }
+        List<ReceiptPermission> permissions = financeDao.getReceiptPermissionsByUserId(user.getId());
+        user.setPermissions(permissions);
+        List<Integer> permissionIdList = new ArrayList<>();
+        if (!CollectionUtils.isEmpty(permissions)) {
+            for (ReceiptPermission item : permissions) {
+                if (null != item) {
+                    permissionIdList.add(item.getId());
+                }
+            }
+        }
+        String permissionIds = CommonUtil.idListToString(permissionIdList, ",");
+        user.setPermissionIds(permissionIds);
+    }
+}

+ 310 - 10
src/main/resources/mapper/FinanceDao.xml

@@ -3,7 +3,7 @@
 <mapper namespace="com.caimei365.manager.dao.FinanceDao">
     <insert id="insertReceiptUser" keyProperty="id" keyColumn="id" useGeneratedKeys="true">
         INSERT INTO cm_receipt_user(name, password, user_type, mobile, create_time)
-        VALUES(#{name}, #{password}, #{userType}, #{mobile},  NOW())
+        VALUES (#{name}, #{password}, #{userType}, #{mobile}, NOW())
     </insert>
     <update id="updateReceiptUser">
         UPDATE cm_receipt_user SET name=#{name},
@@ -14,32 +14,332 @@
         WHERE id = #{id}
     </update>
     <delete id="deleteReceiptUser">
-        UPDATE cm_receipt_user SET del_flag=1, update_time=NOW() WHERE id = #{id}
+        UPDATE cm_receipt_user
+        SET del_flag=1,
+            update_time=NOW()
+        WHERE id = #{id}
     </delete>
     <delete id="deleteReceiptPermissionRelation">
-        DELETE FROM cm_receipt_user_permission WHERE user_id = #{userId}
+        DELETE
+        FROM cm_receipt_user_permission
+        WHERE user_id = #{userId}
     </delete>
     <insert id="insertReceiptPermissionRelation">
-        INSERT INTO cm_receipt_user_permission(user_id, permission_id) VALUES(#{userId}, #{permissionId})
+        INSERT INTO cm_receipt_user_permission(user_id, permission_id)
+        VALUES (#{userId}, #{permissionId})
     </insert>
     <select id="getReceiptUsers" resultType="com.caimei365.manager.entity.caimei.ReceiptUser">
         SELECT id, user_type AS userType, name, mobile, openid, unionId, del_flag AS delFlag
-        FROM cm_receipt_user WHERE del_flag = 0 ORDER BY id
+        FROM cm_receipt_user
+        WHERE del_flag = 0
+        ORDER BY id
     </select>
     <select id="getReceiptUserById" resultType="com.caimei365.manager.entity.caimei.ReceiptUser">
         SELECT id, user_type AS userType, name, mobile, openid, unionId, del_flag AS delFlag
-        FROM cm_receipt_user WHERE id = #{id}
+        FROM cm_receipt_user
+        WHERE id = #{id}
     </select>
     <select id="getReceiptUserByMobile" resultType="com.caimei365.manager.entity.caimei.ReceiptUser">
         SELECT id, user_type AS userType, name, mobile, openid, unionId, del_flag AS delFlag
-        FROM cm_receipt_user WHERE mobile = #{mobile}
+        FROM cm_receipt_user
+        WHERE mobile = #{mobile}
     </select>
     <select id="getReceiptPermissions" resultType="com.caimei365.manager.entity.caimei.ReceiptPermission">
-        SELECT id, permission FROM cm_receipt_permission  ORDER BY id
+        SELECT id, permission
+        FROM cm_receipt_permission
+        ORDER BY id
     </select>
     <select id="getReceiptPermissionsByUserId" resultType="com.caimei365.manager.entity.caimei.ReceiptPermission">
-        SELECT p.id, p.permission FROM cm_receipt_permission p
-        LEFT JOIN cm_receipt_user_permission crup ON crup.permission_id = p.id
+        SELECT p.id, p.permission
+        FROM cm_receipt_permission p
+                 LEFT JOIN cm_receipt_user_permission crup ON crup.permission_id = p.id
         WHERE crup.user_id = #{userId}
     </select>
+    <select id="getReceiptType" resultType="com.caimei365.manager.entity.caimei.ReceiptType">
+        SELECT `id`, `type`
+        FROM cm_receipt_type
+        ORDER BY id
+    </select>
+    <select id="getReceiptList" resultType="com.caimei365.manager.entity.caimei.ReceiptList"
+            parameterType="com.caimei365.manager.entity.caimei.ReceiptParam">
+        -- relationType值为1是为子订单ID,为2时为主订单ID
+        SELECT DISTINCT
+        a.id,
+        a.receiptDate,
+        a.receiptAmount,
+        a.payWay,
+        a.payType,
+        a.receiptType,
+        a.receiptStatus,
+        (IF(crr.relationType = '1', cso_cr.orderType, cr.orderType)) AS orderType,
+        (IF(crr.relationType = '1',
+        CONCAT('子订单',cso.shopOrderNo,'(',cso.shopOrderID,')'),
+        CONCAT(cso.orderNo,'(',cr.orderID,')')
+        )) AS orders,
+        (IF(crr.relationType = '1', IFNULL(u_cr.userName, u_cr.name), IFNULL(u.userName, u.name ))) AS userName,
+        (IF(cr.organizeID = '1', '星范', (IF(cr.orderType = '2', '呵呵商城', '')) )) AS suffix
+        FROM cm_discern_receipt a
+        LEFT JOIN cm_receipt_order_relation crr ON crr.receiptID = a.id AND crr.delFlag = '0'
+        LEFT JOIN cm_coupon_buyrecord ccb ON crr.couponRecordId=ccb.id
+        -- 主订单
+        LEFT JOIN cm_order cr ON cr.orderID = crr.orderID
+        LEFT JOIN USER u ON u.userID = cr.userID
+        -- 子订单
+        LEFT JOIN cm_shop_order cso ON cso.shopOrderID = crr.orderID
+        LEFT JOIN cm_order cso_cr ON cso.orderID = cso_cr.orderID
+        LEFT JOIN USER u_cr ON u_cr.userID = cso_cr.userID
+        <where>
+            <if test="id != null and id != '' and id != 0 ">
+                AND a.id = #{id}
+            </if>
+            <if test="organizeId != null and organizeId != 9999 ">
+                AND cr.organizeID = #{organizeId}
+            </if>
+            <if test="organizeId == 9999 ">
+                AND cr.orderType = 2
+            </if>
+            <if test="startTime != null and startTime != ''">
+                AND (a.receiptDate &gt; #{startTime} OR a.receiptDate = #{startTime})
+            </if>
+            <if test="endTime != null and endTime != ''">
+                AND (a.receiptDate &lt; #{endTime} OR a.receiptDate = #{endTime})
+            </if>
+            <if test="payWay != null and payWay != ''">
+                AND a.payWay = #{payWay}
+            </if>
+            <if test="payType != null and payType != ''">
+                AND a.payType = #{payType}
+            </if>
+            <if test="receiptType != null and receiptType != ''">
+                AND a.receiptType = #{receiptType}
+            </if>
+            <if test="receiptStatus != null and receiptStatus != ''">
+                AND a.receiptStatus = #{receiptStatus}
+            </if>
+            <if test="orderNo != null and orderNo != ''">
+                AND ((cr.orderNo LIKE CONCAT('%',#{orderNo},'%')) OR (cso.shopOrderNo like concat('%',#{orderNo},'%')))
+            </if>
+            <if test="orderId != null and orderId != ''">
+                AND (cr.orderID = #{orderId} OR (crr.relationType = '1' AND cso_cr.orderID = #{orderId}))
+            </if>
+            <if test="userName != null and userName != ''">
+                AND (u.userName LIKE CONCAT('%',#{userName},'%') or u.name LIKE concat('%',#{userName},'%'))
+            </if>
+            <if test="receiptProgress != null and receiptProgress != ''">
+                AND (IF(crr.relationType = '1', cso_cr.receiptStatus, cr.receiptStatus)) = #{receiptProgress}
+            </if>
+            <if test="receiptOrderType != null and receiptOrderType != ''">
+                AND (IF(crr.relationType = '1', cso.orderType, cr.orderType)) = #{receiptOrderType}
+            </if>
+            <if test="associationNum != null and associationNum != ''">
+                <if test="associationNum == 1">
+                    AND (SELECT COUNT(1) FROM cm_receipt_order_relation WHERE receiptID = a.id AND delFlag = '0') = 1
+                </if>
+                <if test="associationNum == 2">
+                    AND (SELECT COUNT(1) FROM cm_receipt_order_relation WHERE receiptID = a.id AND delFlag = '0')
+                    <![CDATA[ > ]]> 1
+                </if>
+            </if>
+            AND a.delFlag = '0' GROUP BY a.id
+        </where>
+        ORDER BY a.receiptDate DESC
+    </select>
+    <select id="getReceiptDetail" resultType="com.caimei365.manager.entity.caimei.ReceiptDetail">
+        SELECT DISTINCT cdr.id,
+                        cdr.payWay,
+                        cdr.payType,
+                        cdr.receiptType,
+                        cdr.receiptStatus,
+                        cdr.receiptAmount,
+                        cdr.smsContent,
+                        cdr.smsMd5Code,
+                        cdr.receiptDate,
+                        cdr.confirmDate,
+                        cdr.reviewDate,
+                        cdr.cancelDate,
+                        cdr.handlingFee,
+                        cdr.orderFlag,
+                        cdr.noOrderReason,
+                        cdr.cancelReason,
+                        cdr.confirmType,
+                        cdr.reviewReason,
+                        cdr.receiptUserPermissionID AS receiptUserPermissionId,
+                        cdr.confirmUserPermissionID AS confirmUserPermissionId,
+                        cdr.reviewUserPermissionID  AS reviewUserPermissionId,
+                        cdr.cancelUserPermissionID  AS cancelUserPermissionId
+        FROM cm_discern_receipt cdr
+        WHERE cdr.id = #{id}
+    </select>
+    <select id="getReceiptRelations" resultType="com.caimei365.manager.entity.caimei.ReceiptRelation">
+        SELECT cror.id,
+               IFNULL(cror.relationType, 0) AS relationType,
+               cror.receiptID               AS receiptId,
+               cror.associateAmount,
+               cror.orderID                 AS orderId
+        FROM cm_receipt_order_relation cror
+        WHERE cror.receiptID = #{receiptId}
+          AND cror.delFlag = 0
+    </select>
+    <select id="getReceiptOrderByShopOrderId" resultType="com.caimei365.manager.entity.caimei.ReceiptOrder">
+        SELECT cso.orderNo,
+               cso.orderID       AS orderId,
+               co.payTotalFee    AS orderAmount,
+               co.payableAmount,
+               (SELECT SUM(o.needPayAmount)
+                FROM cm_receipt_order_relation cror
+                         LEFT JOIN cm_shop_order o ON cror.orderID = o.shopOrderID
+                         LEFT JOIN cm_discern_receipt cdr ON cdr.id = cror.receiptID
+                WHERE o.orderID = cso.orderID
+                  AND cror.delFlag = '0'
+                  AND cdr.delFlag = '0'
+                  AND cdr.receiptStatus = '2'
+               )                 AS receiptAmount,
+               bou.name          AS customerName,
+               co.receiptStatus,
+               co.orderType,
+               co.orderTime,
+               co.userID         AS userId,
+               cso.shopOrderNo,
+               cso.shopOrderID   AS shopOrderId,
+               cso.needPayAmount AS shopOrderAmount,
+               cso.shouldPayShopAmount,
+               cso.payedShopAmount,
+               s.name            AS shopName
+        FROM cm_shop_order cso
+                 LEFT JOIN cm_order co ON cso.orderID = co.orderID
+                 LEFT JOIN shop s ON cso.shopID = s.shopID
+                 LEFT JOIN bp_order_userinfo bou ON bou.orderId = cso.orderID
+        WHERE cso.shopOrderID = #{shopOrderId}
+    </select>
+    <select id="getOrderInfoByOrderId" resultType="com.caimei365.manager.entity.caimei.ReceiptOrder">
+        SELECT co.orderNo,
+               co.orderID     AS orderId,
+               co.payTotalFee AS orderAmount,
+               co.payableAmount,
+               (SELECT SUM(cror.associateAmount)
+                FROM cm_receipt_order_relation cror
+                         LEFT JOIN cm_order o ON o.orderID = cror.orderID
+                         LEFT JOIN cm_discern_receipt cdr ON cdr.id = cror.receiptID
+                WHERE o.orderID = co.orderID
+                  AND cror.delFlag = '0'
+                  AND cdr.delFlag = '0'
+                  AND cdr.receiptStatus = '3'
+               )              AS receiptAmount,
+               bou.name       AS customerName,
+               co.receiptStatus,
+               co.orderType,
+               co.orderTime,
+               co.organizeID  AS organizeId,
+               co.userID      AS userId
+        FROM cm_order co
+                 LEFT JOIN bp_order_userinfo bou ON bou.orderId = co.orderID
+        WHERE co.orderID = #{orderId}
+    </select>
+    <select id="getRefundAmountByShopOrder" resultType="java.lang.Double">
+        SELECT IFNULL(SUM(refundAmount), 0)
+        FROM cm_refund_shop_record
+        WHERE shopOrderID = #{shopOrderId}
+          AND delFlag = 0
+    </select>
+    <select id="getReceiptRecordByOrderId" resultType="com.caimei365.manager.entity.caimei.ReceiptRecord">
+        SELECT
+        cror.receiptID AS receiptID,
+        cdr.receiptDate AS receiptTime,
+        cdr.receiptStatus AS receiptStatus,
+        cdr.confirmType AS confirmType,
+        cdr.receiptType AS receiptType,
+        cdr.payType AS payType,
+        cdr.receiptAmount AS receiptAmount,
+        cror.associationType AS associationType,
+        cdr.payWay AS payWay,
+        cdr.transactionNum AS transactionNum,
+        cror.mbOrderId AS mbOrderId,
+        cdr.confirmUserPermissionID AS confirmUserPermissionID,
+        (SELECT cru.name FROM cm_receipt_user cru WHERE cru.id = cdr.confirmUserPermissionID) AS confirmUserName,
+        cdr.confirmDate AS confirmDate,
+        cdr.reviewUserPermissionID AS reviewUserPermissionID,
+        (SELECT cru.name FROM cm_receipt_user cru WHERE cru.id = cdr.reviewUserPermissionID) AS reviewUserName,
+        cdr.reviewDate AS reviewDate,
+        cdr.cancelUserPermissionID AS cancelUserPermissionID,
+        (SELECT su.name FROM sys_user su WHERE su.id = cdr.cancelUserPermissionID) AS cancelUserName,
+        cdr.cancelDate AS cancelDate,
+        cdr.cancelReason AS cancelReason
+        FROM cm_receipt_order_relation cror
+        JOIN cm_discern_receipt cdr ON cdr.id = cror.receiptID
+        WHERE cror.delFlag = '0' AND cdr.delFlag = '0'
+        <if test="relationType == 1">
+            AND cror.orderID IN (SELECT shopOrderID FROM cm_shop_order WHERE orderID = #{orderId}) and cror.relationType
+            = '1'
+        </if>
+        <if test="relationType == 2">
+            AND cror.orderID = #{orderId} and cror.relationType = '2'
+        </if>
+    </select>
+    <select id="getReturnBalanceAmount" resultType="java.lang.Double">
+        SELECT IFNULL(SUM(amount), 0)
+        FROM cm_user_balance_record
+        WHERE balanceType = 2
+          AND receiptId = #{receiptId}
+          AND delFlag = 0;
+    </select>
+    <select id="getAssociateAmountByOrderId" resultType="java.lang.Double">
+        SELECT IFNULL(SUM(cdr.receiptAmount), 0)
+        FROM cm_receipt_order_relation cror
+                 LEFT JOIN cm_discern_receipt cdr ON cdr.id = cror.receiptID
+        WHERE cror.orderID = #{orderId}
+          AND cror.relationType = '2'
+          AND cdr.delFlag = 0
+          AND cror.delFlag = 0
+          AND cdr.receiptStatus = '3'
+          AND payWay != '3';
+    </select>
+    <select id="sumUserMoney" resultType="java.lang.Double">
+        SELECT IFNULL(SUM(amount), 0)
+        FROM cm_user_balance_record
+        WHERE orderId = #{orderId}
+          AND balanceType = 1
+          AND delflag = 0
+    </select>
+    <select id="sumOnlineMoney" resultType="java.lang.Double">
+        SELECT IFNULL(SUM(amount), 0)
+        FROM cm_user_balance_record
+        WHERE orderId = #{orderId}
+          AND balanceType = 10
+          AND delflag = 0
+    </select>
+    <select id="getReceiptVipInfo" resultType="com.caimei365.manager.entity.caimei.ReceiptVipInfo">
+        SELECT svipr.id,
+               svipr.userId,
+               svipr.packageId,
+               svipr.beginTime,
+               svipr.endTime,
+               svipr.price,
+               svipr.payTime,
+               cror.orderRequestNo,
+               cror.vipRecordId,
+               svipp.duration,
+               c.name AS clubName
+        FROM cm_svip_history svipr
+                 LEFT JOIN cm_receipt_order_relation cror ON svipr.id = cror.vipRecordId
+                 LEFT JOIN club c ON svipr.userId = c.clubID
+                 LEFT JOIN cm_svip_package svipp ON svipp.id = svipr.packageId
+        WHERE cror.receiptID = #{receiptId}
+        LIMIT 1
+    </select>
+    <select id="getReceiptCouponInfo" resultType="com.caimei365.manager.entity.caimei.ReceiptCouponInfo">
+        SELECT c.name AS clubName,
+               cc.touchPrice,
+               cc.couponAmount,
+               cror.mborderId,
+               cc.couponType,
+               cdr.confirmDate
+        FROM cm_receipt_order_relation cror
+                 LEFT JOIN cm_discern_receipt cdr ON cror.receiptID = cdr.id
+                 LEFT JOIN cm_order co ON cror.orderId = co.orderID
+                 LEFT JOIN club c ON co.userID = c.userID
+                 LEFT JOIN cm_coupon_buyrecord ccb ON ccb.id = cror.couponRecordId
+                 LEFT JOIN cm_coupon cc ON ccb.couponId = cc.id
+        WHERE receiptID = #{receiptId}
+    </select>
+
 </mapper>