Explorar o código

获取收款列表

chao %!s(int64=3) %!d(string=hai) anos
pai
achega
9880b0b510

+ 1 - 0
backup.sql

@@ -86,6 +86,7 @@ CREATE TABLE `cm_receipt_user` (
   `mobile` VARCHAR(11) NULL COMMENT '收款用户手机号',
   `password` VARCHAR(255) NULL COMMENT '收款用户密码',
   `openid` varchar(255) NULL COMMENT '收款用户微信openid',
+  `unionId` varchar(255) NULL COMMENT '收款用户微信unionId',
   `user_type` char(2) NULL COMMENT '收款用户类型:1协销人员,2客服,3财务,4超级管理员',
   `name` VARCHAR(100) NOT NULL COMMENT '姓名',
   `create_time` DATETIME DEFAULT NULL COMMENT '创建时间',

+ 76 - 14
src/main/java/com/caimei365/order/controller/ReceiptApi.java

@@ -4,18 +4,21 @@ import com.caimei365.order.model.ResponseJson;
 import com.caimei365.order.model.dto.ReceiptAuthDto;
 import com.caimei365.order.model.dto.ReceiptDto;
 import com.caimei365.order.model.po.ReceiptPo;
+import com.caimei365.order.model.vo.ReceiptTypeVo;
 import com.caimei365.order.model.vo.ReceiptVo;
 import com.caimei365.order.model.vo.ReceiptUserVo;
 import com.caimei365.order.service.ReceiptService;
+import com.github.pagehelper.PageInfo;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import lombok.RequiredArgsConstructor;
 import org.springframework.http.HttpHeaders;
 import org.springframework.util.StringUtils;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestHeader;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
 
 /**
  * 线下收款接口
@@ -23,7 +26,7 @@ import org.springframework.web.bind.annotation.RestController;
  * @author : Charles
  * @date : 2022/2/11
  */
-@Api(tags="线下收款API")
+@Api(tags = "线下收款API")
 @RestController
 @RequiredArgsConstructor
 @RequestMapping("/order/receipt")
@@ -31,12 +34,12 @@ public class ReceiptApi {
     private final ReceiptService receiptService;
 
     /**
-     * 线下收款用户微信授权,用户数据存入Redis,key前缀:wxInfo:receipt:
+     * 线下收款用户微信授权
      *
      * @param receiptAuthDto {
-     *                           code          微信授权code
-     *                           encryptedData 微信加密数据
-     *                           iv            加密算法的初始向量
+     *                       code          微信授权code
+     *                       encryptedData 微信加密数据
+     *                       iv            加密算法的初始向量
      *                       }
      */
     @ApiOperation("线下收款用户微信授权(小程序)")
@@ -51,6 +54,17 @@ public class ReceiptApi {
         return receiptService.receiptAuthorization(code, encryptedData, iv, headers);
     }
 
+    /**
+     * 线下收款用户密码登录
+     *
+     * @param receiptAuthDto {
+     *                       code          微信授权code
+     *                       encryptedData 微信加密数据
+     *                       iv            加密算法的初始向量
+     *                       mobile        手机号
+     *                       password      密码
+     *                       }
+     */
     @ApiOperation("线下收款用户密码登录")
     @PostMapping("/password")
     public ResponseJson<ReceiptUserVo> passwordAuthorization(ReceiptAuthDto receiptAuthDto, @RequestHeader HttpHeaders headers) {
@@ -62,29 +76,77 @@ public class ReceiptApi {
         if (!StringUtils.hasLength(code)) {
             return ResponseJson.error("没有获取到微信授权code", null);
         }
-        if (StringUtils.hasLength(mobile) && StringUtils.hasLength(password)){
-            return receiptService.passwordAuthorization(mobile, password, code, encryptedData, iv,  headers);
+        if (StringUtils.hasLength(mobile) && StringUtils.hasLength(password)) {
+            return receiptService.passwordAuthorization(mobile, password, code, encryptedData, iv, headers);
         } else {
             return ResponseJson.error("手机号或密码不能为空", null);
         }
     }
 
+    /**
+     * 获取收款类型
+     */
+    @ApiOperation("获取收款类型")
+    @GetMapping("/type")
+    public ResponseJson<List<ReceiptTypeVo>> getReceiptType() {
+        return receiptService.getReceiptType();
+    }
+
+    /**
+     * 识别收款短信
+     *
+     * @param receiptDto {
+     *                   smsContent          短信类容
+     *                   }
+     */
     @ApiOperation("识别收款短信")
     @PostMapping("/read/sms")
     public ResponseJson<ReceiptVo> readSmsMessage(ReceiptDto receiptDto) {
-        String message = receiptDto.getSmsContent();
-        if (StringUtils.hasLength(message)) {
-            return receiptService.readSmsMessage(message, receiptDto.getOpenid());
+        String smsContent = receiptDto.getSmsContent();
+        if (StringUtils.hasLength(smsContent)) {
+            return receiptService.readSmsMessage(smsContent, receiptDto.getOpenid());
         } else {
             return ResponseJson.error("收款短信不能为空", null);
         }
     }
 
+    /**
+     * 保存收款信息
+     */
     @ApiOperation("保存收款信息")
     @PostMapping("/save")
     public ResponseJson<ReceiptPo> saveReceipt(ReceiptDto receiptDto) {
         return receiptService.saveReceipt(receiptDto);
     }
 
+    /**
+     * 获取收款列表
+     */
+    @ApiOperation("获取收款列表")
+    @ApiImplicitParams({
+            @ApiImplicitParam(required = false, name = "receiptType", value = "收款款项类型:1订单款,2非订单款,3返佣款 4订单款或者非订单款(因财务阶段无法区分订单非订单), 5供应商退款"),
+            @ApiImplicitParam(required = false, name = "receiptStatus", value = "收款状态:1待确认、2已确认(待审核)、3审核通过、4审核未通过、5收款撤销【线上支付成功为审核通过】"),
+            @ApiImplicitParam(required = false, name = "smsContent", value = "收款短信"),
+            @ApiImplicitParam(required = false, name = "startDate", value = "筛选开始时间"),
+            @ApiImplicitParam(required = false, name = "endDate", value = "筛选结束时间"),
+            @ApiImplicitParam(required = false, name = "openid", value = "微信openid"),
+            @ApiImplicitParam(required = false, name = "pageNum", value = "页码"),
+            @ApiImplicitParam(required = false, name = "pageSize", value = "每页数量")
+    })
+    @GetMapping("/list")
+    public ResponseJson<PageInfo<ReceiptVo>> getReceiptList(String receiptType,
+                                                            String receiptStatus,
+                                                            String smsContent,
+                                                            String startDate,
+                                                            String endDate,
+                                                            String openid,
+                                                            @RequestParam(value = "pageNum", defaultValue = "1") int pageNum,
+                                                            @RequestParam(value = "pageSize", defaultValue = "10") int pageSize) {
+        if (!StringUtils.hasLength(openid)) {
+            return ResponseJson.error("微信openid不能为空!", null);
+        }
+        return receiptService.getReceiptList(receiptType, receiptStatus, smsContent, startDate, endDate, openid, pageNum, pageSize);
+    }
+
 }
 

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

@@ -1,6 +1,8 @@
 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.ReceiptTypeVo;
 import com.caimei365.order.model.vo.ReceiptUserVo;
 import com.caimei365.order.model.vo.ReceiptVo;
 import org.apache.ibatis.annotations.Mapper;
@@ -34,11 +36,15 @@ public interface ReceiptMapper {
     /**
      * 根据mobile更新openid
      */
-    void updateOpenidByMobile(String openId, String mobile);
+    void updateOpenidByMobile(String openId, String unionId, String mobile);
     /**
      * 获取用户权限: 1录入收款权限,2收款确认权限,3收款审核权限 4返佣管理权限 5供应商退款管理权限
      */
     List<Integer> getPermissionsByUserId(Integer userId);
+    /**
+     * 获取收款类型列表
+     */
+    List<ReceiptTypeVo> getReceiptType();
     /**
      * 短信内容Md5加密串 获取收款记录
      */
@@ -67,5 +73,16 @@ public interface ReceiptMapper {
      * 获取该主订单下面所有已完成状态退货退款商品数量
      */
     Integer getReturnAndCancelNum(Integer orderId);
-
+    /**
+     * 获取协销Id
+     */
+    Integer getServiceProviderId(String unionId);
+    /**
+     * 获取协销下的机构userIds
+     */
+    List<Integer> getClubUserIdBySpId(Integer spId);
+    /**
+     * 获取收款列表
+     */
+    List<ReceiptVo> getReceiptList(ReceiptParamsBo receiptParamsBo);
 }

+ 46 - 0
src/main/java/com/caimei365/order/model/bo/ReceiptParamsBo.java

@@ -0,0 +1,46 @@
+package com.caimei365.order.model.bo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2022/2/16
+ */
+@Data
+public class ReceiptParamsBo implements Serializable {
+    private static final long serialVersionUID = 1L;
+    /**
+     * 收款款项类型:1订单款,2非订单款,3返佣款
+     */
+    private String receiptType;
+    /**
+     * 短信内容Md5加密串
+     */
+    private String smsMd5Code;
+    /**
+     * 用户id集合
+     */
+    private List<Integer> userIds;
+    /**
+     * 收款状态:1待确认、2已确认(待审核)、3审核通过、4审核未通过、5收款撤销【线上支付成功为审核通过】
+     */
+    private String receiptStatus;
+    /**
+     * 收款状态列表
+     */
+    private String[] receiptStatusList;
+    /**
+     * 筛选开始时间
+     */
+    private String startDate;
+    /**
+     * 筛选结束时间
+     */
+    private String endDate;
+}

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

@@ -0,0 +1,27 @@
+package com.caimei365.order.model.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2022/2/16
+ */
+@Data
+public class ReceiptTypeVo implements Serializable {
+    private static final long serialVersionUID = 1L;
+    /**
+     * 收款类型Id
+     */
+    @ApiModelProperty("收款类型Id")
+    private Integer id;
+    /**
+     * 收款类型
+     */
+    @ApiModelProperty("收款类型名称")
+    private Integer type;
+}

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

@@ -49,5 +49,9 @@ public class ReceiptUserVo implements Serializable {
      */
     @ApiModelProperty("用户权限: 1录入收款权限,2收款确认权限,3收款审核权限 4返佣管理权限 5供应商退款管理权限")
     private Integer permission;
-
+    /**
+     * 微信unionId
+     */
+    @ApiModelProperty("微信unionId")
+    private String unionId;
 }

+ 32 - 3
src/main/java/com/caimei365/order/service/ReceiptService.java

@@ -3,10 +3,14 @@ package com.caimei365.order.service;
 import com.caimei365.order.model.ResponseJson;
 import com.caimei365.order.model.dto.ReceiptDto;
 import com.caimei365.order.model.po.ReceiptPo;
+import com.caimei365.order.model.vo.ReceiptTypeVo;
 import com.caimei365.order.model.vo.ReceiptUserVo;
 import com.caimei365.order.model.vo.ReceiptVo;
+import com.github.pagehelper.PageInfo;
 import org.springframework.http.HttpHeaders;
 
+import java.util.List;
+
 /**
  * Description
  *
@@ -15,26 +19,51 @@ import org.springframework.http.HttpHeaders;
  */
 public interface ReceiptService {
     /**
-     * 线下收款用户微信授权,用户数据存入Redis,key前缀:wxInfo:receipt:
+     * 线下收款用户微信授权
+     *
      * @param code          微信授权code
      * @param encryptedData 微信加密数据
      * @param iv            加密算法的初始向量
      * @return receiptUser
      */
     ResponseJson<ReceiptUserVo> receiptAuthorization(String code, String encryptedData, String iv, HttpHeaders headers);
+
     /**
      * 线下收款用户密码登录
+     *
      * @param mobile   手机号
      * @param password 密码
      */
     ResponseJson<ReceiptUserVo> passwordAuthorization(String mobile, String password, String code, String encryptedData, String iv, HttpHeaders headers);
+
+    /**
+     * 获取收款类型
+     */
+    ResponseJson<List<ReceiptTypeVo>> getReceiptType();
+
     /**
      * 识别收款短信
-     * @param message 收款短信
+     *
+     * @param smsContent 收款短信
      */
-    ResponseJson<ReceiptVo> readSmsMessage(String message, String openid);
+    ResponseJson<ReceiptVo> readSmsMessage(String smsContent, String openid);
+
     /**
      * 保存收款信息
      */
     ResponseJson<ReceiptPo> saveReceipt(ReceiptDto receiptDto);
+
+    /**
+     * 获取收款列表
+     *
+     * @param receiptType   收款款项类型:1订单款,2非订单款,3返佣款 4订单款或者非订单款(因财务阶段无法区分订单非订单), 5供应商退款
+     * @param receiptStatus 收款状态:1待确认、2已确认(待审核)、3审核通过、4审核未通过、5收款撤销【线上支付成功为审核通过】
+     * @param smsContent    收款短信
+     * @param startDate     筛选开始时间
+     * @param endDate       筛选结束时间
+     * @param openid        微信openid
+     * @param pageNum       页码
+     * @param pageSize      每页数量
+     */
+    ResponseJson<PageInfo<ReceiptVo>> getReceiptList(String receiptType, String receiptStatus, String smsContent, String startDate, String endDate, String openid, int pageNum, int pageSize);
 }

+ 127 - 31
src/main/java/com/caimei365/order/service/impl/ReceiptServiceImpl.java

@@ -6,18 +6,22 @@ import com.caimei365.order.mapper.OrderCommonMapper;
 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.ReceiptDto;
 import com.caimei365.order.model.enums.OrderStatus;
 import com.caimei365.order.model.po.BalanceRecordPo;
 import com.caimei365.order.model.po.OrderReceiptRelationPo;
 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;
 import com.caimei365.order.service.ReceiptService;
 import com.caimei365.order.utils.DateUtils;
 import com.caimei365.order.utils.MathUtil;
 import com.caimei365.order.utils.Md5Util;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
@@ -59,7 +63,6 @@ public class ReceiptServiceImpl implements ReceiptService {
     private static final Pattern PATTERN_ORDER = Pattern.compile("#(.*?)#");
     private static final Pattern PATTERN_ORDER_ID = Pattern.compile("^[-\\+]?[\\d]*$");
 
-
     /**
      * 线下收款用户微信授权
      *
@@ -84,7 +87,7 @@ public class ReceiptServiceImpl implements ReceiptService {
                 return ResponseJson.success(receiptUser);
             }
         }
-        return ResponseJson.error("微信授权失败,请尝试账号密码登录!",null);
+        return ResponseJson.error("微信授权失败,请尝试账号密码登录!", null);
     }
 
     /**
@@ -94,7 +97,7 @@ public class ReceiptServiceImpl implements ReceiptService {
      * @param password 密码
      */
     @Override
-    public ResponseJson<ReceiptUserVo> passwordAuthorization(String mobile, String password, String code, String encryptedData, String iv,  HttpHeaders headers) {
+    public ResponseJson<ReceiptUserVo> passwordAuthorization(String mobile, String password, String code, String encryptedData, String iv, HttpHeaders headers) {
         // 收款用户
         ReceiptUserVo receiptUser = receiptMapper.getReceiptUserByMobile(mobile);
         if (null != receiptUser) {
@@ -107,23 +110,35 @@ public class ReceiptServiceImpl implements ReceiptService {
                 if (appletsInfo.getCode() != -1) {
                     Map<String, Object> infoData = appletsInfo.getData();
                     String openid = (String) infoData.get(WeChatService.Keys.OPEN_ID);
-                    receiptMapper.updateOpenidByMobile(openid, mobile);
+                    String unionId = (String) infoData.get(WeChatService.Keys.UNION_ID);
+                    receiptMapper.updateOpenidByMobile(openid, unionId, mobile);
                     receiptUser.setOpenid(openid);
+                    receiptUser.setUnionId(unionId);
                 } else {
                     return ResponseJson.error(appletsInfo.getMsg(), null);
                 }
                 return ResponseJson.success(receiptUser);
             }
         }
-        return ResponseJson.error("登录失败!",null);
+        return ResponseJson.error("登录失败!", null);
+    }
+
+    /**
+     * 获取收款类型
+     */
+    @Override
+    public ResponseJson<List<ReceiptTypeVo>> getReceiptType() {
+        List<ReceiptTypeVo> list = receiptMapper.getReceiptType();
+        return ResponseJson.success(list);
     }
 
     /**
      * 识别收款短信
-     * @param message 收款短信
+     *
+     * @param smsContent 收款短信
      */
     @Override
-    public ResponseJson<ReceiptVo> readSmsMessage(String message, String openid) {
+    public ResponseJson<ReceiptVo> readSmsMessage(String smsContent, String openid) {
         // 收款用户
         ReceiptUserVo receiptUser = checkPermissions(1, openid);
         if (null == receiptUser) {
@@ -131,9 +146,9 @@ public class ReceiptServiceImpl implements ReceiptService {
         }
         try {
             // 识别短信内容
-            ResponseJson<ReceiptVo> receipt = identifyMessage(message);
+            ResponseJson<ReceiptVo> receipt = identifyMessage(smsContent);
             if (receipt != null) {
-                return receipt ;
+                return receipt;
             }
         } catch (Exception e) {
             log.error("短信识别错误!", e);
@@ -163,7 +178,7 @@ public class ReceiptServiceImpl implements ReceiptService {
             receiptPo.setSmsMd5Code(Md5Util.md5(receiptDto.getSmsContent()));
         }
         // 收款作废
-        if (null != receiptDto.getId() && StringUtils.isNotBlank(receiptDto.getDelFlag())){
+        if (null != receiptDto.getId() && StringUtils.isNotBlank(receiptDto.getDelFlag())) {
             // 收款状态receiptStatus:2已确认(待审核)、3审核通过
             if ("2".equals(receiptDto.getReceiptStatus()) || "3".equals(receiptDto.getReceiptStatus())) {
                 // 收款款项类型receiptType:1订单款
@@ -183,8 +198,7 @@ public class ReceiptServiceImpl implements ReceiptService {
             }
             // 更新收款记录
             receiptMapper.updateReceipt(receiptPo);
-        }
-        else {
+        } else {
             // 如果是添加收款则判断是否存在重复添加
             if (StringUtils.isNotBlank(receiptDto.getSmsContent()) && StringUtils.isNotBlank(receiptDto.getPayWay())) {
                 // 无短信备注内容短信无需判断(payWay传值的话是短信识别来的)
@@ -352,7 +366,7 @@ public class ReceiptServiceImpl implements ReceiptService {
                             double userMoney = baseMapper.getUserMoney(order.getUserId());
                             // 可用余额
                             Double availableMoney = baseMapper.getAbleUserMoney(order.getUserId());
-                            log.info("------->userId:" + order.getUserId() +",原余额:" + userMoney + "==原可用余额:" + availableMoney);
+                            log.info("------->userId:" + order.getUserId() + ",原余额:" + userMoney + "==原可用余额:" + availableMoney);
                             if (money < 0d) {
                                 // 待确认状态不需要修改余额,因为本身存在冻结余额不需要重复退回
                                 if (0 != order.getStatus()) {
@@ -366,7 +380,7 @@ public class ReceiptServiceImpl implements ReceiptService {
                             }
 
                             payOrderMapper.updateMoneyByUserId(userMoney, availableMoney, order.getUserId());
-                            log.info("------->userId:" + order.getUserId() +",更新余额:" + userMoney + "==更新可用余额:" + availableMoney);
+                            log.info("------->userId:" + order.getUserId() + ",更新余额:" + userMoney + "==更新可用余额:" + availableMoney);
                             log.info("----------->大额抹平金额退回账户:" + order.getUserId());
                             log.info("----------->大额抹平金额:" + money);
                             //保存余额到余额收支记录
@@ -403,11 +417,90 @@ public class ReceiptServiceImpl implements ReceiptService {
         return ResponseJson.success(receiptPo);
     }
 
+    /**
+     * 获取收款列表
+     *
+     * @param receiptType   收款款项类型:1订单款,2非订单款,3返佣款 4订单款或者非订单款(因财务阶段无法区分订单非订单), 5供应商退款
+     * @param receiptStatus 收款状态:1待确认、2已确认(待审核)、3审核通过、4审核未通过、5收款撤销【线上支付成功为审核通过】
+     * @param smsContent    收款短信
+     * @param startDate     筛选开始时间
+     * @param endDate       筛选结束时间
+     * @param openid        微信openid
+     * @param pageNum       页码
+     * @param pageSize      每页数量
+     */
+    @Override
+    public ResponseJson<PageInfo<ReceiptVo>> getReceiptList(String receiptType, String receiptStatus, String smsContent, String startDate, String endDate, String openid, int pageNum, int pageSize) {
+        ReceiptParamsBo paramsBo = new ReceiptParamsBo();
+        // 获取该收款用户下的机构userIds
+        List<Integer> clubUserIds = getReceiptClubUserIds(openid, receiptStatus);
+        paramsBo.setUserIds(clubUserIds);
+        if (StringUtils.isNotBlank(smsContent)) {
+            // 短信内容隐藏余额
+            String message = hiddenBalance(smsContent);
+            paramsBo.setSmsMd5Code(Md5Util.md5(message));
+        }
+        if (StringUtils.isNotBlank(receiptStatus)) {
+            String[] receiptStatusList = null;
+            if ("1".equals(receiptStatus)) {
+                receiptStatusList = "1,4,5".split(",");
+            } else {
+                receiptStatusList = receiptStatus.split(",");
+            }
+            paramsBo.setReceiptStatus(receiptStatus);
+            paramsBo.setReceiptStatusList(receiptStatusList);
+        }
+        // 分页请求数据
+        PageHelper.startPage(pageNum, pageSize);
+        List<ReceiptVo> list = receiptMapper.getReceiptList(paramsBo);
+        PageInfo<ReceiptVo> pageInfo = new PageInfo(list);
+        return ResponseJson.success(pageInfo);
+    }
+
+    /**
+     * 获取该收款用户下的机构userIds
+     *
+     * @param openid        微信openid
+     * @param receiptStatus 收款状态:1待确认、2已确认(待审核)、3审核通过、4审核未通过、5收款撤销【线上支付成功为审核通过】
+     */
+    private List<Integer> getReceiptClubUserIds(String openid, String receiptStatus) {
+        // 收款用户
+        ReceiptUserVo receiptUser = receiptMapper.getReceiptUserByOpenid(openid);
+        List<Integer> userIds = null;
+        Integer userType = null;
+        String logTxt = "";
+        if (null != receiptUser) {
+            //用户类型:1协销人员,2客服,3财务,4超级管理员
+            userType = receiptUser.getUserType();
+            if (1 == userType) {
+                // 协销人员
+                Integer spId = receiptMapper.getServiceProviderId(receiptUser.getUnionId());
+                userIds = receiptMapper.getClubUserIdBySpId(spId);
+                logTxt = "协销";
+            } else if (2 == userType) {
+                // 客服,默认协销id:1342
+                userIds = receiptMapper.getClubUserIdBySpId(1342);
+                Integer spId = receiptMapper.getServiceProviderId(receiptUser.getUnionId());
+                if (null != spId && spId > 0) {
+                    userIds.addAll(receiptMapper.getClubUserIdBySpId(1342));
+                }
+                logTxt = "客服";
+            }
+        }
+        if (null == userIds && null != userType && 4 != userType) {
+            userIds = new ArrayList<>();
+            userIds.add(0);
+        }
+        if (null != userType && 2 == userType && "2".equals(receiptStatus)) {
+            // 客服可以查看所有待审核收款
+            userIds = null;
+        }
+        log.info("用户身份:" + logTxt + ">>>用户类型:" + userType + ">>>userIds:" + userIds);
+        return userIds;
+    }
+
     /**
      * 检查收款权限
-     * @param permission
-     * @param openid
-     * @return
      */
     private ReceiptUserVo checkPermissions(Integer permission, String openid) {
         // 收款用户
@@ -428,14 +521,14 @@ public class ReceiptServiceImpl implements ReceiptService {
      * 以下方法按照短信采样结果实现(新增短信不兼容)
      *
      * @param message 收款短信
-     * 贵公司尾号7297的账户5月23日15时30分往来款收入人民币1800.00元,余额7055.50元。对方户名:哈尔滨爱丽达医疗美容管理有限公司爱建医疗美容诊所。[建设银行]
-     * 【广发银行】尊敬的客户,贵司账号后四位0115 的账户于08日13:55收入一笔方芳尾数为8067的账户转账1850.00元,手续费0.00元。账户余额:1000000.00元。
-     * 【广发银行】您末四位为0115的企业账户于12日16:09收入人民币5000.00元(深圳同城)。账户余额:8907.21元。
-     * 【中信银行】贵公司尾号7172的中信账号于03月15日17:25,二代支付存入人民币3132.30元,当前余额为人民币4373.07元。
-     * 【中信银行】您尾号0897的中信卡于03月06日11:44,存入人民币2358.00元,当前余额为人民币1000000.00元。
-     * 【中信银行】您尾号0897的中信卡于03月19日13:37,财付通快捷支付存入人民币11348.45元,当前余额为人民币1000000.00元。
-     * 【中信银行】您尾号0897的中信卡于03月14日16:01,支付宝存入人民币5994.06元,当前余额为人民币1000000.00元。
-     * 【中信银行】您尾号0897的中信卡于05月29日14:42,二代支付存入人民币10000.00元,当前余额为人民币13871.67元。
+     *                贵公司尾号7297的账户5月23日15时30分往来款收入人民币1800.00元,余额7055.50元。对方户名:哈尔滨爱丽达医疗美容管理有限公司爱建医疗美容诊所。[建设银行]
+     *                【广发银行】尊敬的客户,贵司账号后四位0115 的账户于08日13:55收入一笔方芳尾数为8067的账户转账1850.00元,手续费0.00元。账户余额:1000000.00元。
+     *                【广发银行】您末四位为0115的企业账户于12日16:09收入人民币5000.00元(深圳同城)。账户余额:8907.21元。
+     *                【中信银行】贵公司尾号7172的中信账号于03月15日17:25,二代支付存入人民币3132.30元,当前余额为人民币4373.07元。
+     *                【中信银行】您尾号0897的中信卡于03月06日11:44,存入人民币2358.00元,当前余额为人民币1000000.00元。
+     *                【中信银行】您尾号0897的中信卡于03月19日13:37,财付通快捷支付存入人民币11348.45元,当前余额为人民币1000000.00元。
+     *                【中信银行】您尾号0897的中信卡于03月14日16:01,支付宝存入人民币5994.06元,当前余额为人民币1000000.00元。
+     *                【中信银行】您尾号0897的中信卡于05月29日14:42,二代支付存入人民币10000.00元,当前余额为人民币13871.67元。
      */
     private ResponseJson<ReceiptVo> identifyMessage(String message) throws Exception {
         if (message.contains("银行")) {
@@ -462,7 +555,7 @@ public class ReceiptServiceImpl implements ReceiptService {
                 if (message.contains("支付宝")) {
                     receivableDesc += "-支付宝";
                 }
-            }else if (receivableDesc.contains("广发银行") || receivableDesc.contains("建设银行")) {
+            } else if (receivableDesc.contains("广发银行") || receivableDesc.contains("建设银行")) {
                 // 匹配的第一组数字为银行卡尾号
                 Matcher matcherBank = PATTERN_NUMBER.matcher(message);
                 if (matcherBank.find()) {
@@ -482,7 +575,7 @@ public class ReceiptServiceImpl implements ReceiptService {
                 contentTime.add(group);
             }
             // 建设银行
-            if (Arrays.asList(1, 18, 19).contains(typeId)){
+            if (Arrays.asList(1, 18, 19).contains(typeId)) {
                 time = year + "-" + contentTime.get(1) + "-" + contentTime.get(2) + " " + contentTime.get(3) + ":" + contentTime.get(4) + ":" + "00";
                 int difference = DateUtils.differentDays(time);
                 if (difference < 0) {
@@ -490,7 +583,7 @@ public class ReceiptServiceImpl implements ReceiptService {
                 }
             }
             // 广发银行
-            else if (Arrays.asList(2, 11).contains(typeId)){
+            else if (Arrays.asList(2, 11).contains(typeId)) {
                 time = year + "-" + month + "-" + contentTime.get(1) + " " + contentTime.get(2) + ":" + "00";
                 int difference = DateUtils.differentDays(time);
                 /* 差距大于30天 减一年, 小于30天 减一个月 */
@@ -584,7 +677,7 @@ public class ReceiptServiceImpl implements ReceiptService {
      */
     private ReceiptVo getReceiptByMd5Msg(String md5Msg) {
         List<ReceiptVo> receiptList = receiptMapper.getReceiptBySmsMd5Code(md5Msg);
-        if (!CollectionUtils.isEmpty(receiptList)){
+        if (!CollectionUtils.isEmpty(receiptList)) {
             receiptList.get(0).setHaveFee(tipFeeType.contains(receiptList.get(0).getPayType()));
             return receiptList.get(0);
         }
@@ -593,8 +686,9 @@ public class ReceiptServiceImpl implements ReceiptService {
 
     /**
      * 获取未支付金额
+     *
      * @param order 订单
-     * @param flag (true:计算未审核金额,false:不计算)
+     * @param flag  (true:计算未审核金额,false:不计算)
      */
     private Double getUnPayMoney(OrderVo order, Boolean flag) {
         Double unPayMoney = order.getPayableAmount();
@@ -607,7 +701,8 @@ public class ReceiptServiceImpl implements ReceiptService {
 
     /**
      * 计算已收金额(审核通过金额+(待审核金额))//展示的时候需要加待审核金额  实际计算不需要计算
-     * @param order 订单
+     *
+     * @param order                订单
      * @param isCountUncheckAmount 是否计算未审核金额
      */
     private Double getReceivedAmount(OrderVo order, Boolean isCountUncheckAmount) {
@@ -637,6 +732,7 @@ public class ReceiptServiceImpl implements ReceiptService {
 
     /**
      * 获取退货退款价值(需计算经理折扣存在的情况)(此金额不是指退给用户的金额)
+     *
      * @param order 订单
      */
     private Double getReturnValue(OrderVo order) {

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

@@ -173,37 +173,23 @@
         where id = #{id}
     </update>
     <update id="updateOpenidByMobile">
-        UPDATE cm_receipt_user SET openid=#{openid} WHERE mobile = #{mobile}
+        UPDATE cm_receipt_user SET openid=#{openid},unionId=#{unionId} WHERE mobile = #{mobile}
     </update>
     <select id="getReceiptUserByOpenid" resultType="com.caimei365.order.model.vo.ReceiptUserVo">
-        SELECT DISTINCT id, user_type AS userType, name, mobile, openid, password
+        SELECT DISTINCT id, user_type AS userType, name, mobile, openid, unionId, password
         FROM cm_receipt_user
         WHERE openid = #{openid} AND del_flag = 0
     </select>
     <select id="getReceiptUserByMobile" resultType="com.caimei365.order.model.vo.ReceiptUserVo">
-        SELECT DISTINCT id, user_type AS userType, name, mobile, openid, password
+        SELECT DISTINCT id, user_type AS userType, name, mobile, openid, unionId, password
         FROM cm_receipt_user
         WHERE mobile = #{mobile} AND del_flag = 0
     </select>
     <select id="getPermissionsByUserId" resultType="java.lang.Integer">
         SELECT permission FROM cm_receipt_user_permission WHERE user_id = #{userId}
     </select>
-    <select id="getReceiptBySmsMd5Code" 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.handlingFee,
-            cdr.orderFlag,
-            IFNULL(SUM(cror.associateAmount), 0) AS associateAmount
-        FROM cm_receipt_order_relation cror
-        LEFT JOIN cm_discern_receipt cdr ON cror.receiptID = cdr.id
-        WHERE cdr.smsMd5Code = #{smsMd5Code} AND cdr.delFlag = '0' AND cror.delFlag = '0'
+    <select id="getReceiptType" resultType="com.caimei365.order.model.vo.ReceiptTypeVo">
+        SELECT `id`,`type` FROM cm_receipt_type ORDER BY id
     </select>
     <select id="getReceivablesTypeId" resultType="java.lang.Integer">
         SELECT DISTINCT IFNULL(id, 0) FROM cm_receipt_type WHERE type=#{type}
@@ -255,9 +241,86 @@
             LEFT JOIN cm_returned_purchase b ON a.returnedID = b.id
         WHERE b.orderID = #{orderId} AND b.status = '2' AND b.delFlag = '0'
     </select>
-
-
-
-
+    <select id="getServiceProviderId" resultType="java.lang.Integer">
+        SELECT s.serviceProviderID FROM serviceprovider s
+             LEFT JOIN USER u ON s.userID = u.userID
+        WHERE s.unionId = #{unionId} AND u.validFlag = 1
+        LIMIT 1
+    </select>
+    <select id="getClubUserIdBySpId" resultType="java.lang.Integer">
+        SELECT userID FROM club WHERE spID = #{spId}
+    </select>
+    <select id="getReceiptBySmsMd5Code" 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.handlingFee,
+            cdr.orderFlag,
+            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
+        WHERE cdr.smsMd5Code = #{smsMd5Code} AND cdr.delFlag = '0' AND cror.delFlag = '0'
+    </select>
+    <select id="getReceiptList" resultType="com.caimei365.order.model.vo.ReceiptVo" parameterType="com.caimei365.order.model.bo.ReceiptParamsBo">
+        SELECT DISTINCT
+            cdr.id,
+            cdr.payWay,
+            cdr.payType,
+            cdr.receiptType,
+            cdr.receiptStatus,
+            cdr.receiptAmount,
+            cdr.smsMd5Code,
+            cdr.receiptDate,
+            cdr.handlingFee,
+            cdr.orderFlag,
+            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_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="receiptType != null and receiptType != ''">
+            AND cdr.receiptType = #{receiptType}
+        </if>
+        <if test="smsMd5Code != null and smsMd5Code != ''">
+            AND cdr.smsMd5Code = #{smsMd5Code}
+        </if>
+        <if test="startDate != null  and startDate != ''">
+            AND cdr.receiptDate <![CDATA[  >  ]]> #{startDate}
+        </if>
+        <if test="endDate != null  and endDate != ''">
+            AND cdr.receiptDate <![CDATA[  <  ]]> #{endDate}
+        </if>
+        <if test="receiptStatusList != null and receiptStatusList != ''">
+            AND cdr.receiptStatus in
+            <foreach collection="receiptStatusList" open="(" close=")" separator="," item="val">
+                #{val}
+            </foreach>
+        </if>
+        <if test="userIds != null and userIds.size() > 0 and receiptStatus != 1">
+            AND ((co.userID IN
+                <foreach collection="userIds" open="(" close=")" separator="," item="val">
+                    #{val}
+                </foreach>
+                AND cror.relationType = 2 )
+            OR (cso.userID IN
+                <foreach collection="userIds" open="(" close=")" separator="," item="val">
+                    #{val}
+                </foreach>
+                AND cror.relationType = 1)
+            OR cror.orderID IS NULL)
+        </if>
+        ORDER BY cdr.receiptDate desc
+    </select>
 
 </mapper>