Browse Source

Merge remote-tracking branch 'remotes/origin/developer' into developerA

Aslee 3 years ago
parent
commit
0365e1850d
26 changed files with 1181 additions and 90 deletions
  1. 42 1
      backup.sql
  2. 61 9
      src/main/java/com/caimei365/user/controller/ClubApi.java
  3. 19 4
      src/main/java/com/caimei365/user/mapper/ClubMapper.java
  4. 12 0
      src/main/java/com/caimei365/user/mapper/LoginMapper.java
  5. 5 0
      src/main/java/com/caimei365/user/mapper/SellerMapper.java
  6. 3 0
      src/main/java/com/caimei365/user/model/po/ClubRemarksPo.java
  7. 33 0
      src/main/java/com/caimei365/user/model/vo/ConsultVo.java
  8. 15 0
      src/main/java/com/caimei365/user/model/vo/LoginFailRecordVo.java
  9. 19 1
      src/main/java/com/caimei365/user/model/vo/RemarkVo.java
  10. 18 1
      src/main/java/com/caimei365/user/model/vo/RemarksVo.java
  11. 4 0
      src/main/java/com/caimei365/user/model/vo/ServiceProviderVo.java
  12. 12 0
      src/main/java/com/caimei365/user/model/vo/TeamGroupVo.java
  13. 28 0
      src/main/java/com/caimei365/user/model/vo/TeamLederVo.java
  14. 6 0
      src/main/java/com/caimei365/user/model/vo/UserLoginVo.java
  15. 14 1
      src/main/java/com/caimei365/user/model/vo/VisitRemarkVo.java
  16. 13 0
      src/main/java/com/caimei365/user/model/vo/VisitorRemarkVo.java
  17. 25 3
      src/main/java/com/caimei365/user/service/ClubService.java
  18. 6 3
      src/main/java/com/caimei365/user/service/impl/BaseServiceImpl.java
  19. 229 25
      src/main/java/com/caimei365/user/service/impl/ClubServiceImpl.java
  20. 24 7
      src/main/java/com/caimei365/user/service/impl/LoginServiceImpl.java
  21. 1 0
      src/main/java/com/caimei365/user/service/impl/SellerServiceImpl.java
  22. 360 0
      src/main/java/com/caimei365/user/utils/MathUtil.java
  23. 187 30
      src/main/resources/mapper/ClubMapper.xml
  24. 26 3
      src/main/resources/mapper/LoginMapper.xml
  25. 17 0
      src/main/resources/mapper/SellerMapper.xml
  26. 2 2
      src/main/resources/mapper/SuperVipMapper.xml

+ 42 - 1
backup.sql

@@ -97,4 +97,45 @@ CREATE TABLE `cm_club_remarks_file` (
 ALTER TABLE `club`
     ADD COLUMN `linkManIdentity` INT NULL COMMENT '联系人身份:1老板,2采购,3运营' AFTER `linkMan`;
 
--- ================================== 2021年9月 超级会员S_VIP end ==================================
+-- ================================== 2021年9月 超级会员S_VIP end ==================================
+
+
+
+-------------------------------------2021年12月 客户画像sql--------------------------------------------------------------
+CREATE TABLE `cm_visitor_remarks` (
+  `id` INT NOT NULL AUTO_INCREMENT,
+  `questionManId` VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '咨询人id',
+  `serviceProviderId` INT DEFAULT NULL COMMENT '协销id',
+  `remarks` TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '文字备注',
+  `addTime` DATETIME DEFAULT NULL COMMENT '添加时间',
+  `questionMan` VARCHAR(10) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '咨询人',
+  `clubId` INT DEFAULT NULL COMMENT '同步机构id',
+  `concactTime` DATETIME DEFAULT NULL COMMENT '同步时间',
+  PRIMARY KEY (`id`)
+) ENGINE=INNODB AUTO_INCREMENT=120 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='潜在客户画像';
+
+
+CREATE TABLE `cm_visitor_remarks_file` (
+  `id` INT NOT NULL AUTO_INCREMENT,
+  `remarksId` INT DEFAULT NULL COMMENT '潜在用户文字备注表id',
+  `fileType` INT DEFAULT NULL COMMENT '文件类型:1图片,2文件',
+  `fileName` VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '文件名称',
+  `ossName` VARCHAR(45) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT 'oss名称',
+  `imageUrl` TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '图片路径',
+  PRIMARY KEY (`id`)
+) ENGINE=INNODB AUTO_INCREMENT=274 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='潜在用户资料备注文件';
+
+ALTER TABLE `caimei`.`cm_club_remarks`
+  ADD COLUMN `questionMan` VARCHAR(10) NULL   COMMENT '咨询人' AFTER `addTime`,
+  ADD COLUMN `concactTime` DATETIME NULL   COMMENT '同步时间' AFTER `questionMan`;
+
+  ALTER TABLE `caimei`.`product`
+  ADD COLUMN `productDetail` CHAR(2) DEFAULT '2'  NULL   COMMENT '普通机构商品详情1同资质机构商品详情,2用普通机构商品详情' AFTER `virtualFlag`;
+
+  ALTER TABLE `caimei`.`productdetailinfo`
+  CHANGE `detailInfo` `detailInfo` TEXT CHARSET utf8 COLLATE utf8_general_ci NULL  COMMENT '资质机构商品详情信息',
+  ADD COLUMN `commonDetailInfo` TEXT NULL   COMMENT '普通机构商品详情信息' AFTER `detailInfo`;
+
+  ALTER TABLE `caimei`.`product`
+  ADD COLUMN `productDescribe` VARCHAR(230) NULL   COMMENT '商品说明' AFTER `productDetail`;
+  ----------------------------------------------------------------------------------------------------

+ 61 - 9
src/main/java/com/caimei365/user/controller/ClubApi.java

@@ -143,19 +143,31 @@ public class ClubApi {
         return clubService.archiveDeduction(userId, archiveId);
     }
 
-    @ApiOperation("机构资料备注列表")
+    @ApiOperation("注册客户咨询记录")
     @ApiImplicitParams({
             @ApiImplicitParam(required = true, name = "serviceProviderId", value = "协销Id"),
             @ApiImplicitParam(required = false, name = "keyWord", value = "模糊搜索关键词"),
+            @ApiImplicitParam(required = false, name = "startAddTime", value = "添加记录开始时间"),
+            @ApiImplicitParam(required = false, name = "endAddTime", value = "添加记录结束时间"),
+            @ApiImplicitParam(required = false, name = "consult", value = "咨询类别"),
+            @ApiImplicitParam(required = false, name = "leaderId", value = "管理员协销id"),
+            @ApiImplicitParam(required = false, name = "groupId", value = "组员协销id"),
+            @ApiImplicitParam(required = false, name = "manager", value = "是否是协销总管理员标记 1是,2否"),
             @ApiImplicitParam(required = false, name = "pageNum", value = "页码"),
             @ApiImplicitParam(required = false, name = "pageSize", value = "每页数量")
     })
     @GetMapping("/remarks/list")
     public ResponseJson<PaginationVo<RemarkVo>> getRemarksList(Integer serviceProviderId,
                                                                String keyWord,
+                                                               String startAddTime,
+                                                               String endAddTime,
+                                                               String consult,
+                                                               Integer leaderId,
+                                                               Integer groupId,
+                                                               Integer manager,
                                                                @RequestParam(value = "pageNum", defaultValue = "1") int pageNum,
                                                                @RequestParam(value = "pageSize", defaultValue = "20") int pageSize) {
-        return clubService.getRemarksList(serviceProviderId, keyWord, pageNum, pageSize);
+        return clubService.getRemarksList(serviceProviderId, keyWord, startAddTime, endAddTime, consult, leaderId, groupId,manager, pageNum, pageSize);
     }
 
     @ApiOperation("机构资料备注详情")
@@ -173,6 +185,7 @@ public class ClubApi {
      *                        remarks:             文字备注,
      *                        fileList:    [{fileName:"文件名称",ossName:"oss文件名称"},{fileName:"文件名称",ossName:"oss文件名称"}...]
      *                        imageList:   ["图片","图片",...]
+     *                        consult: (1,2) 咨询类别id,英文逗号隔开
      *                        }
      */
     @ApiOperation("保存机构资料备注")
@@ -221,7 +234,7 @@ public class ClubApi {
     /**
      * 潜在用户列表
      */
-    @ApiOperation("潜在用户列表")
+    @ApiOperation("未注册用户列表")
     @ApiImplicitParams({
             @ApiImplicitParam(required = true, name = "serviceProviderId", value = "协销id"),
             @ApiImplicitParam(required = false, name = "keyWord", value = "模糊搜索关键词"),
@@ -229,14 +242,21 @@ public class ClubApi {
             @ApiImplicitParam(required = false, name = "pageSize", value = "每页数量")
     })
     @GetMapping("/remarks/visitor/list")
-    public ResponseJson<PaginationVo<VisitorRemarkVo>> getVisitorList(String serviceProviderId,
-                                                                      String keyWord,
+    public ResponseJson<PaginationVo<VisitorRemarkVo>> getVisitorList(Integer serviceProviderId,
+//                                                                      String keyWord,
+//                                                                      String startAddTime,
+//                                                                      String endAddTime,
+//                                                                      String consult,
+//                                                                      Integer leaderId,
+//                                                                      Integer groupId,
+//                                                                      Integer manager,
                                                                       @RequestParam(value = "pageNum", defaultValue = "1") int pageNum,
                                                                       @RequestParam(value = "pageSize", defaultValue = "20") int pageSize) {
-        if (null == serviceProviderId || "".equals(serviceProviderId)) {
+        if (null == serviceProviderId) {
             return ResponseJson.error("参数异常:协销id不能为空!", null);
         }
-        return clubService.getVisitorList(serviceProviderId, keyWord, pageNum, pageSize);
+//        keyWord, startAddTime, endAddTime, consult, leaderId, groupId,manager,
+        return clubService.getVisitorList(serviceProviderId,  pageNum, pageSize);
     }
 
     /**
@@ -271,6 +291,7 @@ public class ClubApi {
      *                  remarks:             文字备注,
      *                  fileList:    [{fileName:"文件名称",ossName:"oss文件名称"},{fileName:"文件名称",ossName:"oss文件名称"}...]
      *                  imageList:   ["图片","图片",...]
+     *                  consult: (1,2) 咨询类别id,英文逗号隔开
      *                  }
      * @param visitor
      * @return
@@ -301,12 +322,19 @@ public class ClubApi {
     @GetMapping("/remarks/visitor/recordlist")
     public ResponseJson<PaginationVo<VisitRemarkVo>> getVisitorRecordList(String questionManId,
                                                                           String keyWord,
+                                                                          Integer serviceProviderId,
+                                                                          String startAddTime,
+                                                                          String endAddTime,
+                                                                          String consult,
+                                                                          Integer leaderId,
+                                                                          Integer groupId,
+                                                                          Integer manager,
                                                                           @RequestParam(value = "pageNum", defaultValue = "1") int pageNum,
                                                                           @RequestParam(value = "pageSize", defaultValue = "20") int pageSize) {
-        if (null == questionManId || "".equals(questionManId)) {
+        if (null == serviceProviderId) {
             return ResponseJson.error("参数异常:协销id不能为空!", null);
         }
-        return clubService.getVisitorRecordList(keyWord, questionManId, pageNum, pageSize);
+        return clubService.getVisitorRecordList(questionManId,keyWord,serviceProviderId,startAddTime,endAddTime,consult,leaderId,groupId,manager,pageNum, pageSize);
     }
 
     @ApiOperation("删除潜在用户资料备注")
@@ -326,4 +354,28 @@ public class ClubApi {
         return clubService.concactVisitRemarks(clubId, questionManId);
     }
 
+    @ApiOperation("查询咨询类别")
+    @ApiImplicitParams({
+            @ApiImplicitParam(required = false, name = "consults", value = "咨询类别id,英文逗号拼接,可不传")
+    })
+    @PostMapping("/consults")
+    public ResponseJson findConsults(String consults) {
+        return clubService.findConsults(consults);
+    }
+
+    @ApiOperation("查询小组组长和总管理员")
+    @PostMapping("/teams")
+    public ResponseJson findTeams() {
+        return clubService.findTeams();
+    }
+
+    @ApiOperation("根据组长协销id查组员")
+    @ApiImplicitParams({
+            @ApiImplicitParam(required = true, name = "leaderId", value = "组长协销id")
+    })
+    @PostMapping("/teams/groups")
+    public ResponseJson findGroups(Integer leaderId) {
+        return clubService.findGroups(leaderId);
+    }
+
 }

+ 19 - 4
src/main/java/com/caimei365/user/mapper/ClubMapper.java

@@ -7,6 +7,7 @@ import com.caimei365.user.model.vo.*;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -238,7 +239,7 @@ public interface ClubMapper {
 
     void insertQuestionMan(VisitorRemarkVo visitor);
 
-    List<VisitorRemarkVo> getVisitorList(String serviceProviderId);
+    List<VisitorRemarkVo> getVisitorList(Integer serviceProviderId);
 
     void updateQuestionMan(@Param("serviceProviderId") String serviceProviderId, @Param("questionMan") String questionMan, @Param("questionManId") String questionManId);
 
@@ -272,9 +273,23 @@ public interface ClubMapper {
 
     String findQuestionMan(String questionManId);
 
-    List<RemarksVo> getRemarksListByKey(@Param("keyWord") String keyWord, @Param("serviceProviderId") Integer serviceProviderId);
+    List<RemarksVo> getRemarksListByKey(@Param("keyWord") String keyWord, @Param("serviceProviderId") Integer serviceProviderId,@Param("startAddTime")String startAddTime,@Param("endAddTime")String endAddTime, @Param("con")List<String> con);
 
-    List<VisitorRemarkVo> getVisitorListByKey(@Param("serviceProviderId") String serviceProviderId, @Param("keyWord") String keyWord);
+    List<VisitorRemarkVo> getVisitorListByKey(@Param("serviceProviderId") Integer serviceProviderId, @Param("keyWord") String keyWord,@Param("startAddTime")String startAddTime,@Param("endAddTime")String endAddTime,@Param("con")List<String> con);
+    //, @Param("questionManId") String questionManId
+    List<VisitorRemarkVo> getVisitRecordListByKey(@Param("keyWord") String keyWord);
 
-    List<VisitorRemarkVo> getVisitRecordListByKey(@Param("keyWord")String keyWord,@Param("questionManId") String questionManId);
+    List<ConsultVo> findConsult();
+
+    List<TeamLederVo> findAllTeams();
+
+    List<TeamGroupVo> findGroups(Integer leaderId);
+
+    ConsultVo findConsultById(String string);
+
+    List<RemarksVo> findAllRemarks(@Param("keyWord") String keyWord, @Param("startAddTime") String startAddTime, @Param("endAddTime") String endAddTime, @Param("leaderId") Integer leaderId, @Param("groupId") Integer groupId, @Param("con")List<String> con);
+
+    List<VisitorRemarkVo> getAllVisitRemark(@Param("keyWord") String keyWord, @Param("startAddTime") String startAddTime, @Param("endAddTime") String endAddTime, @Param("leaderId") Integer leaderId, @Param("groupId") Integer groupId,@Param("con")List<String> con);
+
+    Integer findLeaderId(Integer serviceProviderId);
 }

+ 12 - 0
src/main/java/com/caimei365/user/mapper/LoginMapper.java

@@ -1,10 +1,14 @@
 package com.caimei365.user.mapper;
 
+import com.caimei365.user.model.vo.LoginFailRecordVo;
 import com.caimei365.user.model.vo.ServiceProviderVo;
 import com.caimei365.user.model.vo.UserLoginVo;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.Date;
+import java.util.List;
+
 /**
  * Description
  *
@@ -119,4 +123,12 @@ public interface LoginMapper {
      * 会员机构类型:1医美,2生
      */
     Integer getClubTypeById(Integer userId);
+
+    void insertLoginFailRecord(@Param("time") Date time,@Param("userId")Integer userId);
+
+    List<LoginFailRecordVo> findLoginFailRecord(@Param("userId")Integer userId,@Param("time") Date time);
+
+    Integer findTimes(@Param("id")Integer id,@Param("time") Date time);
+
+    void updateLoginFailRecord(@Param("dbUserId")Integer dbUserId,@Param("time") Date time);
 }

+ 5 - 0
src/main/java/com/caimei365/user/mapper/SellerMapper.java

@@ -70,4 +70,9 @@ public interface SellerMapper {
      */
     ServiceProviderPo getSellerByUserId(Integer userId);
 
+    Integer findManager(String mobile);
+
+    Integer findManagerByUser(Integer userId);
+
+    Integer findLeaderId(Integer userId);
 }

+ 3 - 0
src/main/java/com/caimei365/user/model/po/ClubRemarksPo.java

@@ -29,6 +29,9 @@ public class ClubRemarksPo implements Serializable {
     @ApiModelProperty("文字备注")
     private String remarks;
 
+    @ApiModelProperty("咨询类别id,英文逗号隔开")
+    private String consult;
+
     @ApiModelProperty("咨询人姓名")
     private String questionMan;
 

+ 33 - 0
src/main/java/com/caimei365/user/model/vo/ConsultVo.java

@@ -0,0 +1,33 @@
+package com.caimei365.user.model.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author Administrator
+ */
+@Data
+public class ConsultVo implements Serializable {
+
+    private Integer id;
+    /**
+     * 咨询类别名称
+     */
+    private String className;
+    /**
+     * 咨询类别状态1启用,2停用
+     */
+    private Integer status;
+    /**
+     * 咨询类别排序值
+     */
+    private Integer sortNumber;
+    /**
+     * 创建时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createdTime;
+}

+ 15 - 0
src/main/java/com/caimei365/user/model/vo/LoginFailRecordVo.java

@@ -0,0 +1,15 @@
+package com.caimei365.user.model.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class LoginFailRecordVo implements Serializable {
+    private Integer id;
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date loginTime;
+    private Integer userId;
+}

+ 19 - 1
src/main/java/com/caimei365/user/model/vo/RemarkVo.java

@@ -9,6 +9,7 @@ import java.util.List;
 
 @Data
 public class RemarkVo implements Serializable {
+    private Integer serviceProviderId;
     /**
      * 备注id
      */
@@ -39,14 +40,31 @@ public class RemarkVo implements Serializable {
      * 文件列表
      */
     private List<RemarksFileVo> fileList;
-
+    /**
+     * 咨询类别
+     */
+    private String consult;
     /**
      * 咨询人
      */
     private String questionMan;
 
+    private String questionManId;
+
     /**
      * 机构名称
      */
     private String clubName;
+    /**
+     * 管理员姓名
+     */
+    private String leaderName;
+    /**
+     * 记录人
+     */
+    private String recordName;
+    /**
+     * 咨询类别回显
+     */
+    private String consultBack;
 }

+ 18 - 1
src/main/java/com/caimei365/user/model/vo/RemarksVo.java

@@ -23,6 +23,10 @@ public class RemarksVo implements Serializable {
      * 文字备注
      */
     private String remarks;
+    /**
+     * 咨询类别
+     */
+    private String consult;
     /**
      * 添加时间
      */
@@ -36,6 +40,10 @@ public class RemarksVo implements Serializable {
      * 机构id
      */
     private Integer clubId;
+    /**
+     * 机构名称
+     */
+    private String clubName;
     /**
      * 咨询人姓名
      */
@@ -53,5 +61,14 @@ public class RemarksVo implements Serializable {
     /**
      * 协销id
      */
-    private String serviceProviderId;
+    private Integer serviceProviderId;
+    /**
+     * 记录人
+     */
+    private String recordName;
+
+    /**
+     * 管理员姓名
+     */
+    private String leaderName;
 }

+ 4 - 0
src/main/java/com/caimei365/user/model/vo/ServiceProviderVo.java

@@ -23,4 +23,8 @@ public class ServiceProviderVo{
      * 协销状态,见表c_serviceproviderstatus或枚举ServiceProviderStatus
      */
     private Integer status;
+    /**
+     * 协销姓名
+     */
+    private String name;
 }

+ 12 - 0
src/main/java/com/caimei365/user/model/vo/TeamGroupVo.java

@@ -0,0 +1,12 @@
+package com.caimei365.user.model.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class TeamGroupVo implements Serializable {
+
+    private Integer groupId;
+    private String groupName;
+}

+ 28 - 0
src/main/java/com/caimei365/user/model/vo/TeamLederVo.java

@@ -0,0 +1,28 @@
+package com.caimei365.user.model.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class TeamLederVo implements Serializable {
+
+    private Integer teamId;
+    /**
+     * 组长协销id
+     */
+    private Integer leaderId;
+    /**
+     *   组长姓名
+     */
+    private String leaderName;
+    /**
+     * 	总管理员标记,1是,2否
+     */
+    private Integer manager;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createdTime;
+}

+ 6 - 0
src/main/java/com/caimei365/user/model/vo/UserLoginVo.java

@@ -144,4 +144,10 @@ public class UserLoginVo implements Serializable {
      */
     @ApiModelProperty("机构类型:1医美,2生美")
     private Integer firstClubType;
+
+    @ApiModelProperty("是否是协销总管理员标记 1是,2否")
+    private Integer manager;
+
+    @ApiModelProperty("是否是协销组长,有id则是,没有则不是")
+    private Integer leaderId;
 }

+ 14 - 1
src/main/java/com/caimei365/user/model/vo/VisitRemarkVo.java

@@ -9,7 +9,14 @@ import java.util.List;
 
 @Data
 public class VisitRemarkVo  implements Serializable {
-
+    /**
+     * 管理员
+     */
+    private String leaderName;
+    /**
+     * 记录人
+     */
+    private String recordName;
     /**
      * 潜在用户备注id
      */
@@ -28,6 +35,12 @@ public class VisitRemarkVo  implements Serializable {
      * 关键词列表
      */
     private List<String> remarks;
+    /**
+     * 咨询类别
+     */
+    private String consult;
+
+    private String consultBack;
     /**
      * 添加时间
      */

+ 13 - 0
src/main/java/com/caimei365/user/model/vo/VisitorRemarkVo.java

@@ -54,9 +54,22 @@ public class VisitorRemarkVo implements Serializable {
      * 图片列表
      */
     private List<String> imageList;
+    /**
+     * 咨询类别
+     */
+    private String consult;
 
+    private String consultBack;
     /**
      * 文件列表
      */
     private List<RemarksFileVo> fileList;
+    /**
+     * 管理员姓名
+     */
+    private String leaderName;
+    /**
+     * 记录人
+     */
+    private String recordName;
 }

+ 25 - 3
src/main/java/com/caimei365/user/service/ClubService.java

@@ -101,6 +101,7 @@ public interface ClubService {
      *                        remarks:             文字备注,
      *                        fileList:    [{fileName:"文件名称",ossName:"oss文件名称"},{fileName:"文件名称",ossName:"oss文件名称"}...]
      *                        imageList:   ["图片","图片",...]
+     *                        consult: (1,2) 咨询类别id,英文逗号隔开
      *                        }
      * @return
      * @return
@@ -115,7 +116,14 @@ public interface ClubService {
      * @param pageSize          每页数量
      * @return
      */
-    ResponseJson<PaginationVo<RemarkVo>> getRemarksList(Integer serviceProviderId, String keyWord, int pageNum, int pageSize);
+    ResponseJson<PaginationVo<RemarkVo>> getRemarksList(Integer serviceProviderId,
+                                                        String keyWord,
+                                                        String startAddTime,
+                                                        String endAddTime,
+                                                        String consult,
+                                                        Integer leaderId,
+                                                        Integer manager,
+                                                        Integer groupId,int pageNum, int pageSize);
 
     /**
      * 获取机构资料备注详情
@@ -154,7 +162,15 @@ public interface ClubService {
      * @param serviceProviderId
      * @return
      */
-    ResponseJson<PaginationVo<VisitorRemarkVo>> getVisitorList(String serviceProviderId, String keyWord, int pageNum, int pageSize);
+    ResponseJson<PaginationVo<VisitorRemarkVo>> getVisitorList(Integer serviceProviderId,
+//                                                               String keyWord,
+//                                                               String startAddTime,
+//                                                               String endAddTime,
+//                                                               String consult,
+//                                                               Integer leaderId,
+//                                                               Integer manager,
+//                                                               Integer groupId,
+                                                               int pageNum, int pageSize);
 
     /**
      * 修改潜在客户咨询人姓名
@@ -182,7 +198,7 @@ public interface ClubService {
      */
     ResponseJson<VisitRemarkVo> getVisitRemark(Integer remarksId);
 
-    ResponseJson<PaginationVo<VisitRemarkVo>> getVisitorRecordList(String keyWord,String questionManId, int pageNum, int pageSize);
+    ResponseJson<PaginationVo<VisitRemarkVo>> getVisitorRecordList(String questionManId,String keyWord,Integer serviceProviderId,String startAddTime,String endAddTime,String consult,Integer leaderId,Integer groupId,Integer manager, int pageNum, int pageSize);
 
     ResponseJson deleteVisitRemarks(String remarksId);
 
@@ -194,4 +210,10 @@ public interface ClubService {
      * @return
      */
     ResponseJson concactVisitRemarks(String clubId, String questionManId);
+
+    ResponseJson findConsults(String consults);
+
+    ResponseJson findTeams();
+
+    ResponseJson findGroups(Integer leaderId);
 }

+ 6 - 3
src/main/java/com/caimei365/user/service/impl/BaseServiceImpl.java

@@ -26,9 +26,7 @@ import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.text.SimpleDateFormat;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 
 /**
@@ -393,6 +391,11 @@ public class BaseServiceImpl implements BaseService {
         // 设置密码
         String dbPassword = Md5Util.md5(passWord);
         baseMapper.updatePasswordByUserId(dbPassword, dbUserId);
+        //重新设置密码后将登录失败表中近30分钟记录置为删除
+        Calendar c = Calendar.getInstance();
+        c.setTime(new Date());
+        c.add(Calendar.MINUTE,-30);
+        loginMapper.updateLoginFailRecord(dbUserId,c.getTime());
         return ResponseJson.success("密码修改成功", "");
     }
 

+ 229 - 25
src/main/java/com/caimei365/user/service/impl/ClubServiceImpl.java

@@ -22,6 +22,7 @@ import com.caimei365.user.model.po.UserPo;
 import com.caimei365.user.model.vo.*;
 import com.caimei365.user.service.ClubService;
 import com.caimei365.user.utils.ImageUtils;
+import com.caimei365.user.utils.MathUtil;
 import com.caimei365.user.utils.OssUtil;
 import com.github.pagehelper.Page;
 import com.github.pagehelper.PageHelper;
@@ -375,6 +376,7 @@ public class ClubServiceImpl implements ClubService {
      *                        remarks:             文字备注,
      *                        fileList:    [{fileName:"文件名称",ossName:"oss文件名称"},{fileName:"文件名称",ossName:"oss文件名称"}...]
      *                        imageList:   ["图片","图片",...]
+     *                        consult: (1,2) 咨询类别id,英文逗号隔开
      *                        }
      * @return
      */
@@ -386,6 +388,7 @@ public class ClubServiceImpl implements ClubService {
             Integer remarksId = jsonObject.getInteger("remarksId");
             Integer serviceProviderId = jsonObject.getInteger("serviceProviderId");
             String remarks = jsonObject.getString("remarks");
+            String consult = jsonObject.getString("consult");
             String questionMan = jsonObject.getString("questionMan");
             if (null == clubId) {
                 return ResponseJson.error("参数异常,机构id不能为空");
@@ -401,6 +404,7 @@ public class ClubServiceImpl implements ClubService {
             clubRemarksPo.setServiceProviderId(serviceProviderId);
             clubRemarksPo.setRemarks(remarks);
             clubRemarksPo.setQuestionMan(questionMan);
+            clubRemarksPo.setConsult(consult);
             if (newRemarks) {
                 // 新增备注
                 clubMapper.insertRemarks(clubRemarksPo);
@@ -440,15 +444,38 @@ public class ClubServiceImpl implements ClubService {
     }
 
     @Override
-    public ResponseJson<PaginationVo<RemarkVo>> getRemarksList(Integer serviceProviderId, String keyWord, int pageNum, int pageSize) {
+    public ResponseJson<PaginationVo<RemarkVo>> getRemarksList(Integer serviceProviderId,
+                                                               String keyWord,
+                                                               String startAddTime,
+                                                               String endAddTime,
+                                                               String consult,
+                                                               Integer leaderId,
+                                                               Integer groupId,
+                                                               Integer manager,
+                                                               int pageNum, int pageSize) {
         if (null == serviceProviderId) {
             return ResponseJson.error("参数异常,协销id不能为空", null);
         }
-        PageInfo<RemarksVo> pageInfo=null;
-        if (StringUtils.isNotBlank(keyWord)) {
-            pageInfo = PageHelper.startPage(pageNum, pageSize).doSelectPageInfo(() -> clubMapper.getRemarksListByKey(keyWord, serviceProviderId));
+        PageInfo<RemarksVo> pageInfo = null;
+        Integer findLeader = clubMapper.findLeaderId(serviceProviderId);
+        List<String> conss = new ArrayList<>();
+        if(StringUtils.isNotBlank(consult)){
+            if(consult.contains(",")){
+                conss = Arrays.asList(consult.split(","));
+            }else{
+                conss.add(consult);
+            }
+        }
+        if (null != manager && 1 == manager) {
+            //主管查所有注册客户咨询记录
+            List<String> finalConss = conss;
+            pageInfo = PageHelper.startPage(pageNum, pageSize).doSelectPageInfo(() -> clubMapper.findAllRemarks(keyWord, startAddTime, endAddTime, leaderId, groupId, finalConss));
+        } else if (null != findLeader && findLeader > 0) {
+            List<String> finalConss1 = conss;
+            pageInfo = PageHelper.startPage(pageNum, pageSize).doSelectPageInfo(() -> clubMapper.findAllRemarks(keyWord, startAddTime, endAddTime, serviceProviderId, groupId, finalConss1));
         } else {
-            pageInfo = PageHelper.startPage(pageNum, pageSize).doSelectPageInfo(() -> clubMapper.getRemarksList(serviceProviderId));
+            List<String> finalConss2 = conss;
+            pageInfo = PageHelper.startPage(pageNum, pageSize).doSelectPageInfo(() -> clubMapper.getRemarksListByKey(keyWord, serviceProviderId,startAddTime,endAddTime, finalConss2));
         }
         ArrayList<RemarkVo> remarkVos = new ArrayList<>();
         pageInfo.getList().forEach(r -> {
@@ -461,17 +488,46 @@ public class ClubServiceImpl implements ClubService {
             } else {
                 strings.add(rk);
             }
+            if (StringUtils.isNotBlank(r.getConsult())) {
+                if (r.getConsult().contains(",")) {
+                    String[] split = r.getConsult().split(",");
+                    String Cons = "";
+                    for (String con : split) {
+                        Cons += clubMapper.findConsultById(con).getClassName() + ",";
+                    }
+                    Cons = Cons.substring(0, Cons.length() - 1);
+                    remarkVo.setConsultBack(Cons);
+                } else {
+                    remarkVo.setConsultBack(clubMapper.findConsultById(r.getConsult()).getClassName());
+                }
+            }
+            remarkVo.setLeaderName(r.getLeaderName());
+            remarkVo.setRecordName(r.getRecordName());
+            remarkVo.setServiceProviderId(r.getServiceProviderId());
             remarkVo.setRemarks(strings);
             remarkVo.setQuestionMan(r.getQuestionMan());
             remarkVo.setRemarksId(r.getRemarksId());
             remarkVo.setAddTime(r.getAddTime());
             remarkVo.setClubName(clubMapper.findClubName(r.getClubId()));
+            remarkVo.setClubName(r.getClubName());
+            remarkVo.setConsult(r.getConsult());
             remarkVos.add(remarkVo);
         });
         PaginationVo<RemarkVo> pageVo = new PaginationVo<>(remarkVos);
-        pageVo.setTotalPage(pageInfo.getPages());
-        pageVo.setHasNextPage(pageInfo.isHasNextPage());
-        pageVo.setTotalRecord((int) pageInfo.getTotal());
+        if (null != remarkVos && remarkVos.size() > 0) {
+            pageVo.setTotalRecord(remarkVos.size());
+            if (remarkVos.size() > pageSize) {
+                pageVo.setTotalPage((int) Math.ceil(MathUtil.div(remarkVos.size(), pageSize).doubleValue()));
+                pageVo.setHasNextPage(true);
+            } else {
+                pageVo.setTotalPage(1);
+                pageVo.setHasNextPage(false);
+            }
+        } else {
+            pageVo.setTotalPage(0);
+            pageVo.setHasNextPage(false);
+            pageVo.setTotalRecord(0);
+        }
         return ResponseJson.success(pageVo);
     }
 
@@ -501,6 +557,20 @@ public class ClubServiceImpl implements ClubService {
         remarkVo.setFileList(fileList);
         remarkVo.setImageList(imageList);
         remarkVo.setAddTime(remarksVo.getAddTime());
+        remarkVo.setConsult(remarksVo.getConsult());
+        if (StringUtils.isNotBlank(remarkVo.getConsult())) {
+            if (remarkVo.getConsult().contains(",")) {
+                List<String> cons = Arrays.asList(remarkVo.getConsult().split(","));
+                String Cons = "";
+                for (String con : cons) {
+                    Cons += clubMapper.findConsultById(con).getClassName() + ",";
+                }
+                Cons = Cons.substring(0, Cons.length() - 1);
+                remarkVo.setConsultBack(Cons);
+            } else {
+                remarkVo.setConsultBack(clubMapper.findConsultById(remarkVo.getConsult()).getClassName());
+            }
+        }
         return ResponseJson.success(remarkVo);
     }
 
@@ -644,17 +714,53 @@ public class ClubServiceImpl implements ClubService {
     }
 
     @Override
-    public ResponseJson<PaginationVo<VisitorRemarkVo>> getVisitorList(String serviceProviderId, String keyWord, int pageNum, int pageSize) {
+    public ResponseJson<PaginationVo<VisitorRemarkVo>> getVisitorList(Integer serviceProviderId,
+//                                                                      String keyWord,
+//                                                                      String startAddTime,
+//                                                                      String endAddTime,
+//                                                                      String consult,
+//                                                                      Integer leaderId,
+//                                                                      Integer groupId,
+//                                                                      Integer manager,
+                                                                      int pageNum, int pageSize) {
         if (null == serviceProviderId) {
-            return ResponseJson.error("参数异常,机构id不能为空", null);
+            return ResponseJson.error("参数异常,协销id不能为空", null);
         }
-        List<VisitorRemarkVo> remarksList=new ArrayList<>();
+        List<VisitorRemarkVo> remarksList = new ArrayList<>();
+//        List<String> conss = new ArrayList<>();
+//        if(StringUtils.isNotBlank(consult)){
+//            if(consult.contains(",")){
+//                conss = Arrays.asList(consult.split(","));
+//            }else{
+//                conss.add(consult);
+//            }
+//        }
         PageHelper.startPage(pageNum, pageSize);
-        if(StringUtils.isNotBlank(keyWord)){
-            remarksList = clubMapper.getVisitorListByKey(serviceProviderId,keyWord);
-        }else{
-            remarksList = clubMapper.getVisitorList(serviceProviderId);
-        }
+        remarksList = clubMapper.getVisitorList(serviceProviderId);
+//        Integer findLeader = clubMapper.findLeaderId(serviceProviderId);
+//        if (null != manager && 1 == manager) {
+//            //主管查所有注册客户咨询记录
+//            remarksList = clubMapper.getAllVisitRemark(keyWord, startAddTime, endAddTime, leaderId, groupId,conss);
+//        } else if (null != findLeader && findLeader > 0) {
+//            remarksList = clubMapper.getAllVisitRemark(keyWord, startAddTime, endAddTime, serviceProviderId, groupId,conss);
+//        } else {
+//            remarksList = clubMapper.getVisitorListByKey(serviceProviderId, keyWord,startAddTime, endAddTime,conss);
+//        }
+//        for (VisitorRemarkVo visitorRemarkVo : remarksList) {
+//            if (StringUtils.isNotBlank(visitorRemarkVo.getConsult())) {
+//                if (visitorRemarkVo.getConsult().contains(",")) {
+//                    String[] split = visitorRemarkVo.getConsult().split(",");
+//                    String Cons = "";
+//                    for (String con : split) {
+//                        Cons += clubMapper.findConsultById(con).getClassName() + ",";
+//                    }
+//                    Cons = Cons.substring(0, Cons.length() - 1);
+//                    visitorRemarkVo.setConsultBack(Cons);
+//                } else {
+//                    visitorRemarkVo.setConsultBack(clubMapper.findConsultById(visitorRemarkVo.getConsult()).getClassName());
+//                }
+//            }
+//        }
         return ResponseJson.success(new PaginationVo<>(remarksList));
     }
 
@@ -672,6 +778,7 @@ public class ClubServiceImpl implements ClubService {
             Integer remarksId = jsonObject.getInteger("remarksId");
             Integer serviceProviderId = jsonObject.getInteger("serviceProviderId");
             String remarks = jsonObject.getString("remarks");
+            String consult = jsonObject.getString("consult");
             if (null == questionManId) {
                 return ResponseJson.error("参数异常,咨询人id不能为空");
             }
@@ -685,6 +792,7 @@ public class ClubServiceImpl implements ClubService {
             visitorRemarkVo.setQuestionManId(questionManId);
             visitorRemarkVo.setServiceProviderId(serviceProviderId);
             visitorRemarkVo.setRemarks(remarks);
+            visitorRemarkVo.setConsult(consult);
             visitorRemarkVo.setQuestionMan(clubMapper.findQuestionMan(questionManId));
             if (newRemarks) {
                 // 新增备注
@@ -742,6 +850,7 @@ public class ClubServiceImpl implements ClubService {
             strings.add(rk);
         }
         VisitRemarkVo visit = new VisitRemarkVo();
+        visit.setConsult(visitRemarksVo.getConsult());
         visit.setQuestionMan(visitRemarksVo.getQuestionMan());
         visit.setQuestionManId(visitRemarksVo.getQuestionManId());
         visit.setRemarksId(visitRemarksVo.getRemarksId());
@@ -749,16 +858,44 @@ public class ClubServiceImpl implements ClubService {
         visit.setAddDate(visitRemarksVo.getAddDate());
         visit.setImageList(imageList);
         visit.setFileList(fileList);
+        if (StringUtils.isNotBlank(visitRemarksVo.getConsult())) {
+            if (visitRemarksVo.getConsult().contains(",")) {
+                List<String> cons = Arrays.asList(visitRemarksVo.getConsult().split(","));
+                String Cons = "";
+                for (String con : cons) {
+                    Cons += clubMapper.findConsultById(con).getClassName() + ",";
+                }
+                Cons = Cons.substring(0, Cons.length() - 1);
+                visit.setConsultBack(Cons);
+            } else {
+                visit.setConsultBack(clubMapper.findConsultById(visitRemarksVo.getConsult()).getClassName());
+            }
+        }
         return ResponseJson.success(visit);
     }
 
     @Override
-    public ResponseJson<PaginationVo<VisitRemarkVo>> getVisitorRecordList(String keyWord,String questionManId, int pageNum, int pageSize) {
+    public ResponseJson<PaginationVo<VisitRemarkVo>> getVisitorRecordList(String questionManId, String keyWord, Integer serviceProviderId, String startAddTime, String endAddTime, String consult, Integer leaderId, Integer groupId, Integer manager, int pageNum, int pageSize) {
         PageInfo<VisitorRemarkVo> remarksList = null;
-        if(StringUtils.isNotBlank(keyWord)){
-            remarksList = PageHelper.startPage(pageNum, pageSize).doSelectPageInfo(() -> clubMapper.getVisitRecordListByKey(keyWord,questionManId));
-        }else{
-            remarksList = PageHelper.startPage(pageNum, pageSize).doSelectPageInfo(() -> clubMapper.getVisitRecordList(questionManId));
+        List<String> conss = new ArrayList<>();
+        if(StringUtils.isNotBlank(consult)){
+            if(consult.contains(",")){
+                conss = Arrays.asList(consult.split(","));
+            }else{
+                conss.add(consult);
+            }
+        }
+        Integer findLeader = clubMapper.findLeaderId(serviceProviderId);
+        if (null != manager && 1 == manager) {
+            //主管查所有注册客户咨询记录
+            List<String> finalConss = conss;
+            remarksList = PageHelper.startPage(pageNum, pageSize).doSelectPageInfo(() -> clubMapper.getAllVisitRemark(keyWord, startAddTime, endAddTime, leaderId, groupId, finalConss));
+        } else  if (null != findLeader && findLeader > 0) {
+            List<String> finalConss1 = conss;
+            remarksList = PageHelper.startPage(pageNum, pageSize).doSelectPageInfo(() -> clubMapper.getAllVisitRemark(keyWord, startAddTime, endAddTime, serviceProviderId, groupId, finalConss1));
+        }else {
+            List<String> finalConss2 = conss;
+            remarksList = PageHelper.startPage(pageNum, pageSize).doSelectPageInfo(() ->clubMapper.getVisitorListByKey(serviceProviderId, keyWord,startAddTime, endAddTime, finalConss2));
         }
         ArrayList<VisitRemarkVo> remarkVos = new ArrayList<>();
         remarksList.getList().forEach(r -> {
@@ -771,16 +908,49 @@ public class ClubServiceImpl implements ClubService {
             } else {
                 strings.add(rk);
             }
+            if (StringUtils.isNotBlank(r.getConsult())) {
+                if (r.getConsult().contains(",")) {
+                    String[] split = r.getConsult().split(",");
+                    String Cons = "";
+                    for (String con : split) {
+                        Cons += clubMapper.findConsultById(con).getClassName() + ",";
+                    }
+                    Cons = Cons.substring(0, Cons.length() - 1);
+                    visit.setConsultBack(Cons);
+                } else {
+                    visit.setConsultBack(clubMapper.findConsultById(r.getConsult()).getClassName());
+                }
+            }
+            if(StringUtils.isBlank(r.getQuestionMan())){
+                visit.setQuestionMan(clubMapper.findQuestionMan(r.getQuestionManId()));
+            }else{
+                visit.setQuestionMan(r.getQuestionMan());
+            }
+            visit.setLeaderName(r.getLeaderName());
             visit.setRemarks(strings);
             visit.setAddDate(r.getAddDate());
             visit.setRemarksId(r.getRemarksId());
             visit.setQuestionManId(r.getQuestionManId());
+            visit.setServiceProviderId(r.getServiceProviderId());
+            visit.setRecordName(r.getRecordName());
+            visit.setConsult(r.getConsult());
             remarkVos.add(visit);
         });
         PaginationVo<VisitRemarkVo> pageVo = new PaginationVo<>(remarkVos);
-        pageVo.setTotalPage(remarksList.getPages());
-        pageVo.setHasNextPage(remarksList.isHasNextPage());
-        pageVo.setTotalRecord((int) remarksList.getTotal());
+        if (null != remarkVos && remarkVos.size() > 0) {
+            pageVo.setTotalRecord(remarkVos.size());
+            if (remarkVos.size() > pageSize) {
+                pageVo.setTotalPage((int) Math.ceil(MathUtil.div(remarkVos.size(), pageSize).doubleValue()));
+                pageVo.setHasNextPage(true);
+            } else {
+                pageVo.setTotalPage(1);
+                pageVo.setHasNextPage(false);
+            }
+        } else {
+            pageVo.setTotalPage(0);
+            pageVo.setHasNextPage(false);
+            pageVo.setTotalRecord(0);
+        }
         return ResponseJson.success(pageVo);
     }
 
@@ -821,7 +991,8 @@ public class ClubServiceImpl implements ClubService {
             remarksVo.setClubId(Integer.valueOf(v.getClubId()));
             remarksVo.setQuestionMan(questionMan);
             remarksVo.setAddTime(v.getAddDate());
-            remarksVo.setServiceProviderId(v.getServiceProviderId().toString());
+            remarksVo.setServiceProviderId(v.getServiceProviderId());
+            remarksVo.setConsult(v.getConsult());
             clubMapper.concactVisit(remarksVo);
             if (null != imageList && imageList.size() > 0) {
                 imageList.forEach(i -> clubMapper.insertRemarksImage(remarksVo.getRemarksId(), i));
@@ -832,4 +1003,37 @@ public class ClubServiceImpl implements ClubService {
         });
         return ResponseJson.success("同步成功");
     }
+
+    @Override
+    public ResponseJson findConsults(String consults) {
+        if (StringUtils.isBlank(consults)) {
+            //如果传空,查所有咨询类别
+            List<ConsultVo> list = clubMapper.findConsult();
+            return ResponseJson.success(list);
+        } else {
+            //不传空判断逗号
+            if (consults.contains(",")) {
+                List<String> strings = Arrays.asList(consults.split(","));
+                List<ConsultVo> consultVos = new ArrayList<>();
+                for (String string : strings) {
+                    consultVos.add(clubMapper.findConsultById(string));
+                }
+                return ResponseJson.success(consultVos);
+            } else {
+                return ResponseJson.success(clubMapper.findConsultById(consults));
+            }
+        }
+    }
+
+    @Override
+    public ResponseJson findTeams() {
+        List<TeamLederVo> list = clubMapper.findAllTeams();
+        return ResponseJson.success(list);
+    }
+
+    @Override
+    public ResponseJson findGroups(Integer leaderId) {
+        List<TeamGroupVo> groups = clubMapper.findGroups(leaderId);
+        return ResponseJson.success(groups);
+    }
 }

+ 24 - 7
src/main/java/com/caimei365/user/service/impl/LoginServiceImpl.java

@@ -5,10 +5,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.caimei365.user.components.CommonService;
 import com.caimei365.user.components.RedisService;
 import com.caimei365.user.components.WeChatService;
-import com.caimei365.user.mapper.LoginMapper;
-import com.caimei365.user.mapper.OperationMapper;
-import com.caimei365.user.mapper.RegisterMapper;
-import com.caimei365.user.mapper.SuperVipMapper;
+import com.caimei365.user.mapper.*;
 import com.caimei365.user.model.ResponseJson;
 import com.caimei365.user.model.dto.AuthBindDto;
 import com.caimei365.user.model.dto.LoginPasswordDto;
@@ -16,6 +13,7 @@ import com.caimei365.user.model.dto.ScanBindDto;
 import com.caimei365.user.model.dto.SuperVipDto;
 import com.caimei365.user.model.po.OperationPo;
 import com.caimei365.user.model.po.SuperVipPo;
+import com.caimei365.user.model.vo.LoginFailRecordVo;
 import com.caimei365.user.model.vo.UserLoginVo;
 import com.caimei365.user.service.LoginService;
 import com.caimei365.user.utils.JwtUtil;
@@ -55,7 +53,8 @@ public class LoginServiceImpl implements LoginService {
     private OperationMapper operationMapper;
     @Resource
     private AsyncService asyncService;
-
+    @Resource
+    private SellerMapper sellerMapper;
     /**
      * 小程序邀请码过期天数
      */
@@ -87,6 +86,15 @@ public class LoginServiceImpl implements LoginService {
         UserLoginVo baseUser = loginMapper.getLoginUserByMobileOrEmail(mobileOrEmail);
 
         if (baseUser != null) {
+            //如果30分钟内输入错误记录>=5,return该账号暂时被冻结,请(30-最前一次时间)分钟后重试或直接修改密码
+            Calendar c = Calendar.getInstance();
+            c.setTime(new Date());
+            c.add(Calendar.MINUTE, -30);
+            List<LoginFailRecordVo> fail = loginMapper.findLoginFailRecord(baseUser.getUserId(), c.getTime());
+            if (null != fail && fail.size() >= 5) {
+                Integer minutes = loginMapper.findTimes(fail.get(0).getId(),new Date());
+                return ResponseJson.error("该账号暂时被冻结,请" + (30 - minutes) + "分钟后重试或直接修改密码", null);
+            }
             // 如果前端传入unionId,则存入返回前端
             baseUser.setUnionId(unionId);
             // 比对密码
@@ -100,10 +108,15 @@ public class LoginServiceImpl implements LoginService {
                     // 返回登录校验结果
                     return logonVerify(baseUser);
                 }
+            } else {
+                // 增加一次错误输入密码记录,30分钟内连续五次冻结
+                loginMapper.insertLoginFailRecord(new Date(),baseUser.getUserId());
+                if (null != fail && 4 ==fail.size() ) {
+                    return ResponseJson.error("您已连续输错5次密码,账号被暂时冻结,请于30分钟后重试或直接修改密码",null);
+                }
             }
         }
-
-        return ResponseJson.error("输入的密码和账户名不匹配", null);
+        return ResponseJson.error("账户名与密码不匹配,请重新输入", null);
     }
 
     /**
@@ -158,6 +171,8 @@ public class LoginServiceImpl implements LoginService {
             // 为了过期续签,将token存入redis,并设置超时时间
             redisService.set(sellerToken, sellerToken, JwtUtil.getExpireTime());
             seller.setToken(sellerToken);
+            seller.setManager(sellerMapper.findManagerByUser(seller.getUserId()));
+            seller.setLeaderId(sellerMapper.findLeaderId(seller.getUserId()));
             return ResponseJson.success(seller);
         }
         // 运营人员授权登录
@@ -307,6 +322,8 @@ public class LoginServiceImpl implements LoginService {
 //        }
         // 登录异步赠送10采美豆
         asyncService.loginUpdateBeans(loginUser.getUserId(), loginUser.getUserIdentity());
+        loginUser.setManager(sellerMapper.findManagerByUser(loginUser.getUserId()));
+        loginUser.setLeaderId(sellerMapper.findLeaderId(loginUser.getUserId()));
         log.info("【登录】-----登录成功,userId:" + loginUser.getUserId());
         return ResponseJson.success("登录成功", loginUser);
     }

+ 1 - 0
src/main/java/com/caimei365/user/service/impl/SellerServiceImpl.java

@@ -106,6 +106,7 @@ public class SellerServiceImpl implements SellerService {
         String openId = (String) infoData.get(WeChatService.Keys.OPEN_ID);
         sellerMapper.updateServiceProviderByUserId(seller.getUserId(), openId, unionId);
         log.info("协销账号密码登录openid>>>>" + openId + " ,unionId>>>>>" + unionId);
+        seller.setManager(sellerMapper.findManager(mobile));
         return ResponseJson.success(seller);
     }
 

+ 360 - 0
src/main/java/com/caimei365/user/utils/MathUtil.java

@@ -0,0 +1,360 @@
+package com.caimei365.user.utils;
+
+import org.apache.commons.lang3.StringUtils;
+
+import java.math.BigDecimal;
+import java.text.DecimalFormat;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+
+public class MathUtil {
+
+
+
+	public static int default_scale = 4;
+
+	private static final int MAX_GENERATE_COUNT = 99999;
+	private static int generateCount = 0;
+
+
+	/**
+	 * 两个实数相除,默认四舍五入到4位
+	 *
+	 * @param v1
+	 * @param v2
+	 * @return
+	 */
+	public static BigDecimal div(Object v1, Object v2) {
+		return div(v1, v2, default_scale);
+	}
+
+	/**
+	 * 两个实数相除,默认四舍五入到scale位
+	 *
+	 * @param v1
+	 * @param v2
+	 * @param scale
+	 * @return
+	 */
+	public static BigDecimal div(Object v1, Object v2, int scale) {
+		if (scale < 0) {
+			throw new IllegalArgumentException("四舍五入的位数不能为负数");
+		}
+		BigDecimal b1 = convert(v1);
+		BigDecimal b2 = convert(v2);
+		if (equal0(b2)) {
+			throw new IllegalArgumentException("除数不能为0");
+		}
+		return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP);
+	}
+
+	public static String formatDouble(double s) {
+		DecimalFormat fmt = new DecimalFormat("0.00");
+		return fmt.format(s);
+	}
+
+	public static String[] intersect(String[] arr1, String[] arr2){
+		List<String> l = new LinkedList<String>();
+		Set<String> common = new HashSet<String>();
+		for(String str:arr1){
+			if(!l.contains(str)){
+				l.add(str);
+			}
+		}
+		for(String str:arr2){
+			if(l.contains(str)){
+				common.add(str);
+			}
+		}
+		String[] result={};
+		return common.toArray(result);
+	}
+
+
+	public static synchronized String getUniqueString() {
+		if (generateCount > 99999)
+			generateCount = 0;
+		String uniqueNumber = Long.toString(System.currentTimeMillis())
+				+ Integer.toString(generateCount);
+		generateCount++;
+		return uniqueNumber;
+	}
+
+	/**
+	 * 
+	 * 构造函数
+	 */
+	private MathUtil() {
+
+	}
+
+	/**
+	 * 类型转换函数
+	 * 
+	 * @param o
+	 * @return
+	 */
+	public static BigDecimal convert(Object o) {
+		if (o == null) {
+			return BigDecimal.ZERO;
+		} else if (o instanceof BigDecimal) {
+			return (BigDecimal) o;
+		}
+		String str = o.toString();
+		if (StringUtils.isNotBlank(str)) {
+			return new BigDecimal(str);
+		} else {
+			return BigDecimal.ZERO;
+		}
+	}
+
+	/**
+	 * 两个实数相加
+	 * 
+	 * @param v1
+	 * @param v2
+	 * @return
+	 */
+	public static BigDecimal add(Object v1, Object v2) {
+		BigDecimal b1 = convert(v1);
+		BigDecimal b2 = convert(v2);
+		return b1.add(b2);
+
+	}
+
+	/**
+	 * 两个实数相减
+	 * 
+	 * @param v1
+	 * @param v2
+	 * @return
+	 */
+	public static BigDecimal sub(Object v1, Object v2) {
+		BigDecimal b1 = convert(v1);
+		BigDecimal b2 = convert(v2);
+		return b1.subtract(b2);
+
+	}
+
+	/**
+	 * 两个实数相乘
+	 * 
+	 * @param v1
+	 * @param v2
+	 * @return
+	 */
+	public static BigDecimal mul(Object v1, Object v2) {
+		BigDecimal b1 = convert(v1);
+		BigDecimal b2 = convert(v2);
+		return b1.multiply(b2);
+
+	}
+
+	/**
+	 * 相个实数相乘并四舍五入到Sacle位
+	 * 
+	 * @param v1
+	 * @param v2
+	 * @param scale
+	 * @return
+	 */
+	public static BigDecimal mul(Object v1, Object v2, int scale) {
+		if (scale < 0) {
+			throw new IllegalArgumentException("四舍五入的位数不能为负数");
+		}
+		BigDecimal b1 = convert(v1);
+		BigDecimal b2 = convert(v2);
+		return b1.multiply(b2).setScale(scale, BigDecimal.ROUND_HALF_UP);
+
+	}
+
+	/**
+	 * 两个实数比较
+	 * 
+	 * @param v1
+	 * @param v2
+	 * @return
+	 */
+	public static int compare(Object v1, Object v2) {
+		BigDecimal b1 = convert(v1);
+		BigDecimal b2 = convert(v2);
+		return b1.compareTo(b2);
+	}
+
+	public static boolean equal0(Object v1) {
+		BigDecimal b1 = convert(v1);
+		return b1.compareTo(BigDecimal.ZERO) == 0;
+	}
+
+	public static boolean notEqual0(Object v1) {
+		BigDecimal b1 = convert(v1);
+		return b1.compareTo(BigDecimal.ZERO) != 0;
+	}
+
+	/**
+	 * 两个整数比较
+	 * 
+	 * @param v1
+	 * @param v2
+	 * @return
+	 */
+	public static int compareInt(Integer v1, Integer v2) {
+
+		if (v1 == null) {
+			v1 = new Integer(0);
+		}
+		if (v2 == null) {
+			v2 = new Integer(0);
+		}
+		return v1.compareTo(v2);
+	}
+
+	/**
+	 * 判断两个整数是否相等
+	 * 
+	 * @param v1
+	 * @param v2
+	 * @return
+	 */
+	public static boolean equal(Integer v1, Integer v2) {
+
+		int result = compareInt(v1, v2);
+		return result == 0;
+	}
+
+	/**
+	 * 判断两个整数不等
+	 * 
+	 * @param v1
+	 * @param v2
+	 * @return
+	 */
+	public static boolean notEqual(Integer v1, Integer v2) {
+		int result = compareInt(v1, v2);
+		return result != 0;
+	}
+
+	/**
+	 * 实数的四舍五入函数
+	 * 
+	 * @param v
+	 * @param scale
+	 * @return
+	 */
+	public static BigDecimal round(Object v, int scale) {
+		if (scale < 0) {
+			throw new IllegalArgumentException("四舍五入的位数不能为负数");
+		}
+		BigDecimal b = convert(v);
+		return b.setScale(scale, BigDecimal.ROUND_HALF_UP);
+	}
+
+	/**
+	 * 将字符串转换成整型
+	 * 
+	 * @param value
+	 * @param defaultNum
+	 * @return
+	 */
+	public static int parsetInt(String value, int defaultNum) {
+		if (value != null && !value.equals("")) {
+			int num = defaultNum;
+			try {
+				num = Integer.parseInt(value);
+			} catch (Exception ignored) {
+			}
+			return num;
+		} else {
+			return defaultNum;
+		}
+	}
+
+	/**
+	 * 将string转换为double
+	 * 
+	 * @param value
+	 * @param defaultNum
+	 * @return
+	 */
+	public static double parseDouble(String value, double defaultNum) {
+		if (StringUtils.isBlank(value)) {
+			return defaultNum;
+		}
+
+		value = value.replaceAll(",", "");
+		value = value.replaceAll(" ", "");
+		value = value.replaceAll("¥", "");
+
+		double num = defaultNum;
+		try {
+			num = Double.parseDouble(value);
+		} catch (Exception ignored) {
+		}
+		return num;
+	}
+
+	/**
+	 * 将string 转换为double
+	 * 
+	 * @param value
+	 * @return
+	 */
+	public static double parseDouble(String value) {
+		return parseDouble(value, 0);
+	}
+
+	public static int isNullInteger(Integer v) {
+		if (v == null) {
+			return 0;
+		} else {
+			return v.intValue();
+		}
+	}
+	
+	//
+	private static double EARTH_RADIUS = 6378.137;
+
+	private static double rad(double d) {
+
+		return d * Math.PI / 180.0;
+
+	}
+
+	public static double getDistance(double lat1, double lng1, double lat2,
+
+	double lng2) {
+
+		double radLat1 = rad(lat1);
+
+		double radLat2 = rad(lat2);
+
+		double a = radLat1 - radLat2;
+
+		double b = rad(lng1) - rad(lng2);
+
+		double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2)
+
+		+ Math.cos(radLat1) * Math.cos(radLat2)
+
+		* Math.pow(Math.sin(b / 2), 2)));
+
+		s = s * EARTH_RADIUS;
+
+		s = Math.round(s * 10000) / 10000;
+
+		return s;
+
+	}
+	
+	public static void main(String[] args){
+		double lat1=118.105736;
+		double lng1=24.491558;
+		double lat2=118.110749;
+		double lng2=24.492824;
+		double t=getDistance(lat1,lng1,lat2,lng2);
+		System.out.println(t);
+	}
+
+}

+ 187 - 30
src/main/resources/mapper/ClubMapper.xml

@@ -3,8 +3,8 @@
 <mapper namespace="com.caimei365.user.mapper.ClubMapper">
     <insert id="insertRemarks" parameterType="com.caimei365.user.model.po.ClubRemarksPo" keyProperty="remarksId"
             useGeneratedKeys="true">
-        insert into cm_club_remarks(clubId, serviceProviderId, remarks, addTime, questionMan)
-        values (#{clubId}, #{serviceProviderId}, #{remarks}, now(), #{questionMan})
+        insert into cm_club_remarks(clubId, serviceProviderId, remarks, addTime, questionMan,consultType)
+        values (#{clubId}, #{serviceProviderId}, #{remarks}, now(), #{questionMan},#{consult})
     </insert>
     <insert id="insertRemarksImage">
         insert into cm_club_remarks_file(remarksId, fileType, imageUrl)
@@ -19,8 +19,8 @@
         values (#{questionManId}, #{serviceProviderId}, #{remarks}, now(), #{questionMan}, #{concactTime})
     </insert>
     <insert id="insertVisitorRemark" keyProperty="remarksId" useGeneratedKeys="true">
-        insert into cm_visitor_remarks(questionMan,questionManId, serviceProviderId, remarks, addTime)
-        values (#{questionMan},#{questionManId}, #{serviceProviderId}, #{remarks}, now())
+        insert into cm_visitor_remarks(questionMan, questionManId, serviceProviderId, remarks, addTime,consultType)
+        values (#{questionMan}, #{questionManId}, #{serviceProviderId}, #{remarks}, now(),#{consult})
     </insert>
     <insert id="insertVisitorRemarksImage">
         insert into cm_visitor_remarks_file(remarksId, fileType, imageUrl)
@@ -32,8 +32,8 @@
     </insert>
     <insert id="concactVisit" parameterType="com.caimei365.user.model.vo.RemarksVo" keyProperty="remarksId"
             useGeneratedKeys="true">
-        insert into cm_club_remarks(clubId, serviceProviderId, remarks, addTime, questionMan, concactTime)
-        values (#{clubId}, #{serviceProviderId}, #{remarks}, #{addTime}, #{questionMan}, now())
+        insert into cm_club_remarks(clubId, serviceProviderId, remarks, addTime, questionMan, concactTime,consultType)
+        values (#{clubId}, #{serviceProviderId}, #{remarks}, #{addTime}, #{questionMan}, now(),#{consult})
     </insert>
     <update id="updateClubUserByUpdateInfo">
         update user set
@@ -199,7 +199,8 @@
     <update id="updateRemarks">
         update cm_club_remarks
         set remarks     = #{remarks},
-            questionMan = #{questionMan}
+            questionMan = #{questionMan},
+            consultType = #{consult}
         where id = #{remarksId}
     </update>
     <update id="updateQuestionMan">
@@ -210,7 +211,8 @@
     </update>
     <update id="updateVisitorRemark">
         update cm_visitor_remarks
-        set remarks = #{remarks}
+        set remarks = #{remarks},
+            consultType = #{consult}
         where id = #{remarksId}
     </update>
     <update id="updateVisit">
@@ -276,7 +278,7 @@
         order by addTime desc
     </select>
     <select id="getRemarks" resultType="com.caimei365.user.model.vo.RemarksVo">
-        select ccr.id as remarksId, ccr.remarks, ccr.questionMan, ccr.addTime, ccr.clubId, c.userID
+        select ccr.id as remarksId, ccr.remarks, ccr.questionMan, ccr.addTime, ccr.clubId, c.userID,IFNULL(ccr.consultType,'')as consult
         from cm_club_remarks ccr
                  left join club c on ccr.clubId = c.clubId
         where id = #{remarksId}
@@ -320,7 +322,7 @@
     <select id="getUserCouponCount" resultType="java.lang.Integer">
         SELECT COUNT(a.id)
         FROM cm_coupon_club a
-                 LEFT JOIN cm_coupon cc ON a.couponId = cc.id
+        LEFT JOIN cm_coupon cc ON a.couponId = cc.id
         WHERE cc.delFlag = 0
           AND a.delFlag = 0
           AND a.status = 1
@@ -358,7 +360,7 @@
         ORDER BY informationID DESC
     </select>
     <select id="getVisitorList" resultType="com.caimei365.user.model.vo.VisitorRemarkVo">
-        SELECT questionManId, serviceProviderId, addTime as addDate, questionMan
+        SELECT questionManId, serviceProviderId, addTime as addDate, questionMan,consultType as consult
         FROM cm_visitor_remarks
         WHERE serviceProviderId = #{serviceProviderId}
           and clubId is null
@@ -366,7 +368,7 @@
         ORDER BY addTime DESC
     </select>
     <select id="getVisitRemark" resultType="com.caimei365.user.model.vo.VisitorRemarkVo">
-        select id as remarksId, questionManId, remarks, questionMan, addTime as addDate
+        select id as remarksId, questionManId, remarks, questionMan, addTime as addDate,IFNULL(consultType,'') as consult
         from cm_visitor_remarks
         where id = #{remarksId}
           AND remarks IS NOT NULL
@@ -405,6 +407,7 @@
                addTime as addDate,
                questionMan,
                clubId,
+               consultType as consult,
                concactTime
         from cm_visitor_remarks
         where questionManId = #{questionManId}
@@ -417,32 +420,186 @@
           AND questionMan IS NOT NULL
     </select>
     <select id="getRemarksListByKey" resultType="com.caimei365.user.model.vo.RemarksVo">
-        select ccr.id as remarksId, ccr.remarks, ccr.addTime, ccr.questionMan, ccr.clubId
+        select DISTINCT
+               ccr.id as remarksId, ccr.remarks, ccr.addTime, ccr.questionMan, ccr.clubId,c.Name as clubName,ccr.serviceProviderId,
+        (SELECT linkMan FROM serviceprovider s WHERE s.serviceProviderID = ccr.serviceProviderId) AS recordName,ifnull(ccr.consultType,'') as consult
         from cm_club_remarks ccr
-                 LEFT JOIN club c ON c.clubID = ccr.clubId
+        LEFT JOIN club c ON c.clubID = ccr.clubId
         where ccr.serviceProviderId = #{serviceProviderId}
-            AND ccr.remarks LIKE CONCAT('%', #{keyWord}, '%')
+        <if test="keyWord != null and keyWord != ''">
+           AND ccr.remarks LIKE CONCAT('%', #{keyWord}, '%')
            OR c.name LIKE CONCAT('%', #{keyWord}, '%')
            OR ccr.questionMan LIKE CONCAT('%', #{keyWord}, '%')
+        </if>
+        <if test="startAddTime !=''">
+            and ccr.addTime <![CDATA[  >  ]]> #{startAddTime}
+        </if>
+        <if test="endAddTime != ''">
+            and ccr.addTime <![CDATA[  <  ]]> #{endAddTime}
+        </if>
+        <if test="con != null and con.size > 0">
+           and
+              <foreach collection="con" item="item" index="index"  open="(" close=")" separator="OR">
+                  ccr.consultType LIKE CONCAT('%',#{item},'%')
+             </foreach>
+        </if>
         order by addTime desc
     </select>
     <select id="getVisitorListByKey" resultType="com.caimei365.user.model.vo.VisitorRemarkVo">
-        SELECT questionManId, serviceProviderId, addTime as addDate, questionMan
-        FROM cm_visitor_remarks
-        WHERE serviceProviderId = #{serviceProviderId}
-          and questionMan LIKE CONCAT('%', #{keyWord}, '%')
-          and clubId is null
-        GROUP BY questionManId
-        ORDER BY addTime DESC
+        SELECT DISTINCT
+        ccr.id as remarksId, ccr.questionManId, ccr.remarks, ccr.addTime as addDate, ccr.questionMan,IFNULL(ccr.consultType,'') as consult,
+        ccr.serviceProviderId,
+        (SELECT linkMan FROM serviceprovider s WHERE s.serviceProviderID = ccr.serviceProviderId) AS recordName,
+        (select name from serviceprovider s where s.serviceProviderID = csr.leaderId) as leaderName
+        FROM cm_visitor_remarks ccr
+        left join cm_serviceteam_group csg on csg.serviceId = ccr.serviceProviderID
+        left join cm_serviceteam_role csr on csr.id = csg.teamId
+        left join serviceprovider s on ccr.serviceProviderID = s.serviceProviderID
+        WHERE ccr.serviceProviderId = #{serviceProviderId}
+        and ccr.remarks IS NOT NULL
+        and ccr.clubId is null
+        <if test="keyWord != null and keyWord != ''">
+          and ccr.questionMan LIKE CONCAT('%', #{keyWord}, '%')
+          or ccr.remarks LIKE CONCAT('%', #{keyWord}, '%')
+        </if>
+        <if test="startAddTime !=''">
+            and ccr.addTime <![CDATA[  >  ]]> #{startAddTime}
+        </if>
+        <if test="endAddTime != ''">
+            and ccr.addTime <![CDATA[  <  ]]> #{endAddTime}
+        </if>
+        <if test="con != null and con.size > 0">
+            and
+            <foreach collection="con" item="item" index="index"  open="(" close=")" separator="OR">
+                ccr.consultType LIKE CONCAT('%',#{item},'%')
+            </foreach>
+        </if>
+        ORDER BY ccr.addTime DESC
     </select>
     <select id="getVisitRecordListByKey" resultType="com.caimei365.user.model.vo.VisitorRemarkVo">
-        select id as remarksId, questionManId, remarks, addTime as addDate, questionMan
-        from cm_visitor_remarks
-        where questionManId = #{questionManId}
-          and questionMan LIKE CONCAT('%', #{keyWord}, '%')
-          OR remarks  LIKE CONCAT('%', #{keyWord}, '%')
-          AND remarks IS NOT NULL
-          and clubId is null
-        ORDER BY ADDTIME DESC
+        select DISTINCT
+        ccr.id as remarksId, ccr.questionManId, ccr.remarks, ccr.addTime as addDate, ccr.questionMan,IFNULL(ccr.consultType,'') as consult,
+        ccr.serviceProviderId,
+        (SELECT NAME FROM serviceprovider s WHERE s.serviceProviderID = ccr.serviceProviderId) AS recordName,
+        (select name from serviceprovider s where s.serviceProviderID = csr.leaderId) as leaderName
+        from cm_visitor_remarks ccr
+        left join cm_serviceteam_group csg on csg.serviceId = ccr.serviceProviderID
+        left join cm_serviceteam_role csr on csr.id = csg.teamId
+        left join serviceprovider s on ccr.serviceProviderID = s.serviceProviderID
+        where ccr.remarks IS NOT NULL
+        and ccr.clubId is null
+        <if test="keyWord != null and keyWord != ''">
+           and ccr.questionMan LIKE CONCAT('%', #{keyWord}, '%')
+           OR ccr.remarks LIKE CONCAT('%', #{keyWord}, '%')
+        </if>
+        ORDER BY ccr.ADDTIME DESC
+    </select>
+    <select id="findConsult" resultType="com.caimei365.user.model.vo.ConsultVo">
+        select id, className, status, sortNumber, createdTime
+        from cm_consulttype
+        where delflag = 0
+          and status = 1
+        ORDER BY sortNumber ASC
+    </select>
+    <select id="findAllTeams" resultType="com.caimei365.user.model.vo.TeamLederVo">
+        select csr.id as teamId, csr.leaderId,IF(csm.serviceproviderId IS NULL,2,1) as manager, csr.createdTime, s.name as leaderName
+        from cm_serviceteam_role csr
+        left join serviceprovider s on csr.leaderId = s.serviceProviderID
+        LEFT JOIN cm_serviceteam_manager csm ON csr.leaderId = csm.serviceproviderId
+        where csr.delflag = 0
+    </select>
+    <select id="findGroups" resultType="com.caimei365.user.model.vo.TeamGroupVo">
+        select serviceProviderId as groupId, name as groupName
+        from serviceprovider s
+        left join cm_serviceteam_group csg on s.serviceProviderID = csg.serviceId
+        left join cm_serviceteam_role csr on csr.id = csg.teamId
+        where csr.leaderId = #{leaderId}
+    </select>
+    <select id="findConsultById" resultType="com.caimei365.user.model.vo.ConsultVo">
+        select id, className, status, sortNumber, createdTime
+        from cm_consulttype
+        where delflag = 0
+          and status = 1
+          and id = #{string}
+        ORDER BY sortNumber ASC
+    </select>
+    <select id="findAllRemarks" resultType="com.caimei365.user.model.vo.RemarksVo">
+        SELECT DISTINCT
+               ccr.id AS remarksId, ccr.remarks,ccr.addTime,ccr.questionMan,ccr.serviceProviderId as serviceProviderId,
+        csr.leaderId AS leaderId,IFNULL(ccr.consultType,'') as consult, c.Name as clubName,
+        (SELECT NAME FROM serviceprovider s WHERE s.serviceProviderID= csr.leaderId) AS leaderName,
+        (SELECT linkMan FROM serviceprovider s WHERE s.serviceProviderID = ccr.serviceProviderId) AS recordName
+        FROM cm_club_remarks ccr
+        LEFT JOIN serviceprovider s ON ccr.serviceProviderId = s.serviceProviderID
+        LEFT JOIN club c ON c.clubId=ccr.clubId
+        LEFT JOIN cm_serviceTeam_group csg ON ccr.serviceProviderId = csg.serviceId
+        LEFT JOIN cm_serviceTeam_role csr ON csr.id = csg.teamId
+        <where>
+            <if test="keyWord != null and keyWord !=''">
+                AND ccr.remarks LIKE concat('%',#{keyWord},'%')
+                or ccr.questionMan LIKE CONCAT('%', #{keyWord}, '%')
+            </if>
+            <if test="leaderId != null and leaderId>0">
+                and csr.leaderId = #{leaderId}
+            </if>
+            <if test="groupId != null and groupId>0">
+                and ccr.serviceProviderId = #{groupId}
+            </if>
+            <if test="startAddTime !=''">
+                and ccr.addTime <![CDATA[  >  ]]> #{startAddTime}
+            </if>
+            <if test="endAddTime != ''">
+                and ccr.addTime <![CDATA[  <  ]]> #{endAddTime}
+            </if>
+            <if test="con != null and con.size > 0">
+                and
+                <foreach collection="con" item="item" index="index" open="(" close=")" separator="OR">
+                    ccr.consultType LIKE CONCAT('%',#{item},'%')
+                </foreach>
+            </if>
+        </where>
+        ORDER BY ccr.ADDTIME DESC
+    </select>
+    <select id="getAllVisitRemark" resultType="com.caimei365.user.model.vo.VisitorRemarkVo">
+        SELECT DISTINCT
+        ccr.id AS remarksId, ccr.remarks,ccr.addTime as addDate,ccr.questionMan,IFNULL(ccr.consultType,'') as consult,ccr.serviceProviderId,ccr.questionManId,
+        (SELECT NAME FROM serviceprovider s WHERE s.serviceProviderID = csr.leaderId) AS leaderName,
+        (SELECT linkMan FROM serviceprovider s WHERE s.serviceProviderID = ccr.serviceProviderId) AS recordName
+        FROM cm_visitor_remarks ccr
+        LEFT JOIN serviceprovider s ON ccr.serviceProviderId = s.serviceProviderID
+        LEFT JOIN cm_serviceTeam_group csg ON ccr.serviceProviderId = csg.serviceId
+        LEFT JOIN cm_serviceTeam_role csr ON csr.id = csg.teamId
+        <where>
+            and ccr.remarks IS NOT NULL
+            and ccr.clubId is null
+            <if test="keyWord != null and keyWord !=''">
+                AND ccr.remarks LIKE concat('%',#{keyWord},'%')
+                or ccr.questionMan LIKE CONCAT('%', #{keyWord}, '%')
+            </if>
+            <if test="leaderId != null and leaderId > 0">
+                and csr.leaderId = #{leaderId}
+            </if>
+            <if test="groupId != null and groupId > 0">
+                and ccr.serviceProviderId = #{groupId}
+            </if>
+            <if test="startAddTime !=''">
+                and ccr.addTime <![CDATA[  >  ]]> #{startAddTime}
+            </if>
+            <if test="endAddTime != ''">
+                and ccr.addTime <![CDATA[  <  ]]> #{endAddTime}
+            </if>
+            <if test="con != null and con.size > 0">
+                and
+                <foreach collection="con" item="item" index="index" open="(" close=")" separator="OR">
+                    ccr.consultType LIKE CONCAT('%',#{item},'%')
+                </foreach>
+            </if>
+        </where>
+        ORDER BY ccr.ADDTIME DESC
+    </select>
+    <select id="findLeaderId" resultType="java.lang.Integer">
+        SELECT leaderId FROM cm_serviceteam_role csr
+        LEFT JOIN serviceprovider s ON s.serviceProviderId=csr.leaderId
+        WHERE s.serviceProviderID = #{serviceProviderId}
     </select>
 </mapper>

+ 26 - 3
src/main/resources/mapper/LoginMapper.xml

@@ -1,6 +1,10 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.caimei365.user.mapper.LoginMapper">
+    <insert id="insertLoginFailRecord">
+        insert into cm_loginfail_record (logintime, userid)
+        values (#{time}, #{userId})
+    </insert>
     <select id="getLoginUserByUserId" resultType="com.caimei365.user.model.vo.UserLoginVo">
         select u.userID             as userId,
                u.clubID             as clubId,
@@ -182,6 +186,12 @@
         set loginTime = now()
         where userID = #{userId}
     </update>
+    <update id="updateLoginFailRecord">
+        UPDATE cm_loginfail_record
+        SET delFlag = 1
+        WHERE loginTime <![CDATA[ > ]]> #{time}
+          AND userId = #{dbUserId}
+    </update>
     <select id="getUserIdByOpenId" resultType="java.lang.Integer">
         select o.userID as userId
         from
@@ -254,8 +264,21 @@
         FROM user
     </select>
     <select id="getClubTypeById" resultType="java.lang.Integer">
-        SELECT firstClubType FROM club WHERE userID = #{userId}
+        SELECT firstClubType
+        FROM club
+        WHERE userID = #{userId}
+    </select>
+    <select id="findLoginFailRecord" resultType="com.caimei365.user.model.vo.LoginFailRecordVo">
+        select id, loginTime, userId
+        from cm_loginfail_record
+        where userId = #{userId}
+          and loginTime <![CDATA[ > ]]> #{time}
+          and delFlag = 0
+        order by loginTime asc
+    </select>
+    <select id="findTimes" resultType="java.lang.Integer">
+        SELECT TIMESTAMPDIFF(MINUTE, loginTime, #{time}) AS times
+        FROM cm_loginfail_record
+        WHERE id = #{id}
     </select>
-
-
 </mapper>

+ 17 - 0
src/main/resources/mapper/SellerMapper.xml

@@ -149,4 +149,21 @@
                mainServiceProviderID AS mainServiceProviderId
         from serviceprovider where userID = #{userId}
     </select>
+    <select id="findManager" resultType="java.lang.Integer">
+        SELECT IF(csm.serviceProviderId IS NULL,2,1) AS manager FROM  cm_serviceteam_manager csm
+        LEFT JOIN serviceprovider s ON csm.serviceProviderId = s.serviceProviderId
+        LEFT JOIN USER u ON s.userId = u.userId
+        WHERE u.bindmobile = #{mobile} OR u.mobile = #{mobile}
+    </select>
+    <select id="findManagerByUser" resultType="java.lang.Integer">
+        SELECT IF(csm.serviceProviderId IS NULL,2,1) AS manager
+        FROM  cm_serviceteam_manager csm
+        LEFT JOIN serviceprovider s ON csm.serviceProviderId = s.serviceProviderId
+        WHERE s.userID  = #{userId}
+    </select>
+    <select id="findLeaderId" resultType="java.lang.Integer">
+        SELECT leaderId FROM cm_serviceteam_role csr
+        LEFT JOIN serviceprovider s ON s.serviceProviderId=csr.leaderId
+        WHERE s.userId = #{userId}
+    </select>
 </mapper>

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

@@ -105,9 +105,9 @@
                cs.price,
                cs.userBeans,
                cs.payTime,
-               csp.duration
+               IF(cs.packageId=0,(SELECT TIMESTAMPDIFF(MONTH, cs.beginTime, cs.endTime)),csp.duration) AS duration
         from cm_svip_history cs
-                 left join cm_svip_package csp on cs.packageId = csp.id
+        left join cm_svip_package csp on cs.packageId = csp.id
         where cs.userId = #{userId}
           AND cs.payStatus = 1
         order by cs.payTime desc