Explorar el Código

Merge branch 'dev' of http://git.ycjcjy.com/zhiyuxing/estateagents into dev

魏超 hace 5 años
padre
commit
be6c268b82

+ 2
- 0
src/main/java/com/huiju/estateagents/center/taUser/mapper/TaUserMapper.java Ver fichero

@@ -35,4 +35,6 @@ public interface TaUserMapper extends BaseMapper<TaUser> {
35 35
     TaUser getAdminByAppID(@Param("appid") String appID);
36 36
 
37 37
     List<String> getBuildingIdsOf(@Param("userId") Integer userId,@Param("buildingId") String buildingId);
38
+
39
+    TaUser getUserByPerson(@Param("orgId") Integer orgId, @Param("personId") String personId);
38 40
 }

+ 33
- 54
src/main/java/com/huiju/estateagents/controller/MiniAppController.java Ver fichero

@@ -463,72 +463,51 @@ public class MiniAppController extends BaseController {
463 463
             return ResponseBean.error("校验参数失败", ResponseBean.ERROR_ILLEGAL_PARAMS);
464 464
         }
465 465
 
466
+        // 手机号解码
466 467
         String sessionKey = params.getString("sessionKey");
467 468
         String encryptedData = params.getString("encryptedData");
468 469
         String iv = params.getString("iv");
470
+
471
+        // 楼盘ID
469 472
         String buildingId = params.getString("buildingId");
473
+        // 场景ID
474
+        String sceneId = params.getString("sceneId");
475
+        // 访问目标
476
+        String targetType = params.getString("targetType");
477
+        // 目标ID
478
+        String targetId = params.getString("targetId");
479
+        // 目标名称
480
+        String targetName = params.getString("targetName");
481
+        // 推广用户
482
+        String promoter = params.getString("promoter");
470 483
 
471 484
         // 解密
472 485
         WxMaPhoneNumberInfo phoneNoInfo = miniAppService.getPhoneNoInfo(sessionKey, encryptedData, iv, appid);
486
+        if (null == phoneNoInfo || com.huiju.estateagents.common.StringUtils.isEmpty(phoneNoInfo.getPhoneNumber())) {
487
+            ResponseBean.error("解析用户手机号码出错", ResponseBean.ERROR_UNAVAILABLE);
488
+        }
473 489
 
474
-        // 更新用户绑定手机
475 490
         String openid = getOpenId(request);
476 491
         Integer orgId = getOrgId(request);
477
-        taPersonService.updatePersonPhone(openid, phoneNoInfo.getPhoneNumber(), buildingId, orgId);
478
-        List<TaPerson> taPersons = taPersonService.getPersonsByOpenId(openid);
479
-        if (null == taPersons || taPersons.size() != 1) {
480
-            return ResponseBean.error("验证人员信息失败", ResponseBean.ERROR_UNAVAILABLE);
481
-        }
482
-        TaPerson person = taPersons.get(0);
483
-        QueryWrapper<TaRecommendCustomer> cus = new QueryWrapper<>();
484
-        cus.eq("org_id", orgId);
485
-        cus.eq("phone", phoneNoInfo.getPhoneNumber());
486
-        cus.orderByDesc("create_date");
487
-        List<TaRecommendCustomer> customer = taRecommendCustomerService.list(cus);
488
-        if (customer.size() > 0) {
489
-            for (int i = 0; i < customer.size(); i++) {
490
-                customer.get(i).setPersonId(person.getPersonId());
491
-                customer.get(i).setPicture(person.getAvatarurl());
492
-                customer.get(i).setCountry(person.getCountry());
493
-                customer.get(i).setCity(person.getCity());
494
-                customer.get(i).setProvince(person.getProvince());
495
-            }
496
-//            TaRecommendCustomer customers = customer.get(0);
492
+        String phone = phoneNoInfo.getPhoneNumber();
497 493
 
498
-            if (!taRecommendCustomerService.updateBatchById(customer)) {
499
-                return ResponseBean.error("验证人员信息失败", ResponseBean.ERROR_UNAVAILABLE);
500
-            }
501
-//            if(null != customers.getRecommendPerson()&&!StringUtils.isEmpty(customers.getRecommendPerson())&& StringUtils.isEmpty(person.getRecommendPerson())){
502
-//                person.setRecommendPerson(customers.getRecommendPerson());
503
-//                person.setRecommendPerson(customers.getRecommendPerson());
504
-//                TaPerson recommender = taPersonService.getById(customers.getRecommendPerson());
505
-//                if(null != recommender.getPersonType()&&!StringUtils.isEmpty(recommender.getPersonType())){
506
-//                    person.setRecommendPersonType(recommender.getPersonType());
507
-//                }
508
-//            }
509
-
510
-//            QueryWrapper<TaCustomerPerson> customerPersonQueryWrapper = new QueryWrapper<>();
511
-//            customerPersonQueryWrapper.eq("person_id",person.getPersonId());
512
-//            customerPersonQueryWrapper.eq("customer_id",customers.getCustomerId());
513
-//            List<TaCustomerPerson> list = taCustomerPersonService.list(customerPersonQueryWrapper);
514
-//            if(list.size()<=0){
515
-//                taCustomerPersonService.insertBean(person.getPersonId(),customers.getCustomerId());
516
-//            }
494
+        try {
495
+            taPersonService.authPhone(
496
+                    orgId,
497
+                    openid,
498
+                    phone,
499
+                    buildingId,
500
+                    sceneId,
501
+                    targetType,
502
+                    targetId,
503
+                    targetName,
504
+                    promoter);
505
+
506
+            return ResponseBean.success(phoneNoInfo);
507
+        } catch (Exception e) {
508
+//           e.printStackTrace();
509
+            return ResponseBean.error("授权手机失败: " + e.getMessage(), ResponseBean.ERROR_UNAVAILABLE);
517 510
         }
518
-//        else{
519
-//            TaRecommendCustomer taRecommendCustomer = new TaRecommendCustomer();
520
-//            taRecommendCustomer.setPersonId(person.getPersonId());
521
-//            taRecommendCustomer.setPicture(person.getAvatarurl());
522
-//            taRecommendCustomer.setCountry(person.getCountry());
523
-//            taRecommendCustomer.setCity(person.getCity());
524
-//            taRecommendCustomer.setProvince(person.getProvince());
525
-//            taRecommendCustomer.setVerifyStatus(CommConstant.VERIFY_AGREE);
526
-//            taRecommendCustomer.setOrgId(getOrgId(request));
527
-//            taRecommendCustomer.setEntryType(CommConstant.ENTRY_VOLUNTEER);
528
-//            taRecommendCustomer.setSex(Integer.getInteger(person.getGender()));
529
-//
530
-//        }
531
-        return ResponseBean.success(phoneNoInfo);
532 511
     }
533 512
 
534 513
     /**

+ 149
- 0
src/main/java/com/huiju/estateagents/controller/TaCustomerFromController.java Ver fichero

@@ -0,0 +1,149 @@
1
+package com.huiju.estateagents.controller;
2
+
3
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
4
+import com.baomidou.mybatisplus.core.metadata.IPage;
5
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
6
+import com.huiju.estateagents.base.BaseController;
7
+import com.huiju.estateagents.base.ResponseBean;
8
+import org.slf4j.Logger;
9
+import org.slf4j.LoggerFactory;
10
+import org.springframework.beans.factory.annotation.Autowired;
11
+import org.springframework.web.bind.annotation.PathVariable;
12
+import org.springframework.web.bind.annotation.RequestBody;
13
+import org.springframework.web.bind.annotation.RequestMapping;
14
+import org.springframework.web.bind.annotation.RequestMethod;
15
+import org.springframework.web.bind.annotation.RequestParam;
16
+import org.springframework.web.bind.annotation.ResponseBody;
17
+import com.huiju.estateagents.service.ITaCustomerFromService;
18
+import com.huiju.estateagents.entity.TaCustomerFrom;
19
+import org.springframework.web.bind.annotation.RestController;
20
+
21
+/**
22
+ * <p>
23
+    * 客户来源  前端控制器
24
+    * </p>
25
+ *
26
+ * @author yansen
27
+ * @since 2020-04-27
28
+ */
29
+@RestController
30
+@RequestMapping("/")
31
+public class TaCustomerFromController extends BaseController {
32
+
33
+    private final Logger logger = LoggerFactory.getLogger(TaCustomerFromController.class);
34
+
35
+    @Autowired
36
+    public ITaCustomerFromService iTaCustomerFromService;
37
+
38
+
39
+    /**
40
+     * 分页查询列表
41
+     * @param pageNum
42
+     * @param pageSize
43
+     * @return
44
+     */
45
+    @RequestMapping(value="/taCustomerFrom",method= RequestMethod.GET)
46
+    public ResponseBean taCustomerFromList(@RequestParam(value ="pageNum",defaultValue = "1") Integer pageNum,
47
+                                           @RequestParam(value ="pageSize",defaultValue = "10") Integer pageSize){
48
+        ResponseBean responseBean = new ResponseBean();
49
+        try {
50
+            //使用分页插件
51
+		    IPage<TaCustomerFrom> pg = new Page<>(pageNum, pageSize);
52
+            QueryWrapper<TaCustomerFrom> queryWrapper = new QueryWrapper<>();
53
+            queryWrapper.orderByDesc("create_date");
54
+
55
+            IPage<TaCustomerFrom> result = iTaCustomerFromService.page(pg, queryWrapper);
56
+            responseBean.addSuccess(result);
57
+        }catch (Exception e){
58
+            e.printStackTrace();
59
+            logger.error("taCustomerFromList -=- {}",e.toString());
60
+            responseBean.addError(e.getMessage());
61
+        }
62
+        return responseBean;
63
+    }
64
+
65
+    /**
66
+     * 保存对象
67
+     * @param taCustomerFrom 实体对象
68
+     * @return
69
+     */
70
+    @RequestMapping(value="/taCustomerFrom",method= RequestMethod.POST)
71
+    public ResponseBean taCustomerFromAdd(@RequestBody TaCustomerFrom taCustomerFrom){
72
+        ResponseBean responseBean = new ResponseBean();
73
+        try {
74
+            if (iTaCustomerFromService.save(taCustomerFrom)){
75
+                responseBean.addSuccess(taCustomerFrom);
76
+            }else {
77
+                responseBean.addError("fail");
78
+            }
79
+        }catch (Exception e){
80
+            e.printStackTrace();
81
+            logger.error("taCustomerFromAdd -=- {}",e.toString());
82
+            responseBean.addError(e.getMessage());
83
+        }
84
+        return responseBean;
85
+    }
86
+
87
+    /**
88
+     * 根据id删除对象
89
+     * @param id  实体ID
90
+     */
91
+    @ResponseBody
92
+    @RequestMapping(value="/taCustomerFrom/{id}", method= RequestMethod.DELETE)
93
+    public ResponseBean taCustomerFromDelete(@PathVariable Integer id){
94
+        ResponseBean responseBean = new ResponseBean();
95
+        try {
96
+            if(iTaCustomerFromService.removeById(id)){
97
+                responseBean.addSuccess("success");
98
+            }else {
99
+                responseBean.addError("fail");
100
+            }
101
+        }catch (Exception e){
102
+            e.printStackTrace();
103
+            logger.error("taCustomerFromDelete -=- {}",e.toString());
104
+            responseBean.addError(e.getMessage());
105
+        }
106
+        return responseBean;
107
+    }
108
+
109
+    /**
110
+     * 修改对象
111
+     * @param id  实体ID
112
+     * @param taCustomerFrom 实体对象
113
+     * @return
114
+     */
115
+    @RequestMapping(value="/taCustomerFrom/{id}",method= RequestMethod.PUT)
116
+    public ResponseBean taCustomerFromUpdate(@PathVariable Integer id,
117
+                                        @RequestBody TaCustomerFrom taCustomerFrom){
118
+        ResponseBean responseBean = new ResponseBean();
119
+        try {
120
+            if (iTaCustomerFromService.updateById(taCustomerFrom)){
121
+                responseBean.addSuccess(taCustomerFrom);
122
+            }else {
123
+                responseBean.addError("fail");
124
+            }
125
+        }catch (Exception e){
126
+            e.printStackTrace();
127
+            logger.error("taCustomerFromUpdate -=- {}",e.toString());
128
+            responseBean.addError(e.getMessage());
129
+        }
130
+        return responseBean;
131
+    }
132
+
133
+    /**
134
+     * 根据id查询对象
135
+     * @param id  实体ID
136
+     */
137
+    @RequestMapping(value="/taCustomerFrom/{id}",method= RequestMethod.GET)
138
+    public ResponseBean taCustomerFromGet(@PathVariable Integer id){
139
+        ResponseBean responseBean = new ResponseBean();
140
+        try {
141
+            responseBean.addSuccess(iTaCustomerFromService.getById(id));
142
+        }catch (Exception e){
143
+            e.printStackTrace();
144
+            logger.error("taCustomerFromDelete -=- {}",e.toString());
145
+            responseBean.addError(e.getMessage());
146
+        }
147
+        return responseBean;
148
+    }
149
+}

+ 113
- 0
src/main/java/com/huiju/estateagents/entity/TaCustomerFrom.java Ver fichero

@@ -0,0 +1,113 @@
1
+package com.huiju.estateagents.entity;
2
+
3
+import com.baomidou.mybatisplus.annotation.IdType;
4
+import com.baomidou.mybatisplus.annotation.TableId;
5
+import java.time.LocalDateTime;
6
+import java.io.Serializable;
7
+import lombok.Data;
8
+import lombok.EqualsAndHashCode;
9
+import lombok.experimental.Accessors;
10
+
11
+/**
12
+ * <p>
13
+ * 客户来源 
14
+ * </p>
15
+ *
16
+ * @author yansen
17
+ * @since 2020-04-27
18
+ */
19
+@Data
20
+@EqualsAndHashCode(callSuper = false)
21
+@Accessors(chain = true)
22
+public class TaCustomerFrom implements Serializable {
23
+
24
+    private static final long serialVersionUID = 1L;
25
+
26
+    /**
27
+     * 序号
28
+     */
29
+    @TableId(value = "serial_no", type = IdType.AUTO)
30
+    private Integer serialNo;
31
+
32
+    /**
33
+     * 用户ID
34
+     */
35
+    private String personId;
36
+
37
+    /**
38
+     * 客户ID
39
+     */
40
+    private String customerId;
41
+
42
+    /**
43
+     * 用户名
44
+     */
45
+    private String personName;
46
+
47
+    /**
48
+     * 目标类型
49
+     */
50
+    private String targetType;
51
+
52
+    /**
53
+     * 目标ID
54
+     */
55
+    private String targetId;
56
+
57
+    /**
58
+     * 目标名称
59
+     */
60
+    private String targetName;
61
+
62
+    /**
63
+     * 公司id
64
+     */
65
+    private Integer orgId;
66
+
67
+    /**
68
+     * 楼盘id
69
+     */
70
+    private String buildingId;
71
+
72
+    /**
73
+     * 楼盘名称
74
+     */
75
+    private String buildingName;
76
+
77
+    /**
78
+     * 分享人ID
79
+     */
80
+    private String sharePersonId;
81
+
82
+    /**
83
+     * 分享人名称
84
+     */
85
+    private String sharePersonName;
86
+
87
+    /**
88
+     * 场景ID
89
+     */
90
+    private String sceneId;
91
+
92
+    /**
93
+     * 首次进入小程序
94
+     */
95
+    private Boolean isOrgFirst;
96
+
97
+    /**
98
+     * 首次进入项目
99
+     */
100
+    private Boolean isProjectFirst;
101
+
102
+    /**
103
+     * 创建时间
104
+     */
105
+    private LocalDateTime createDate;
106
+
107
+    /**
108
+     * 备注
109
+     */
110
+    private String remark;
111
+
112
+
113
+}

+ 18
- 0
src/main/java/com/huiju/estateagents/mapper/TaCustomerFromMapper.java Ver fichero

@@ -0,0 +1,18 @@
1
+package com.huiju.estateagents.mapper;
2
+
3
+import com.huiju.estateagents.entity.TaCustomerFrom;
4
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
5
+import org.apache.ibatis.annotations.Mapper;
6
+
7
+/**
8
+ * <p>
9
+ * 客户来源  Mapper 接口
10
+ * </p>
11
+ *
12
+ * @author yansen
13
+ * @since 2020-04-27
14
+ */
15
+@Mapper
16
+public interface TaCustomerFromMapper extends BaseMapper<TaCustomerFrom> {
17
+
18
+}

+ 12
- 0
src/main/java/com/huiju/estateagents/mapper/TaSharePersonFromMapper.java Ver fichero

@@ -44,4 +44,16 @@ public interface TaSharePersonFromMapper extends BaseMapper<TaSharePersonFrom> {
44 44
      */
45 45
     List<TaSharePersonFrom> selectLiveActivityVisitList(Page page, @Param("orgId") Integer orgId, @Param("personType") String personType, @Param("sceneType")String sceneType, @Param("phone")String phone, @Param("liveActivityId")String liveActivityId);
46 46
 
47
+    /**
48
+     * 获取置业的最近一条分享记录
49
+     * @param orgId
50
+     * @param buildingId
51
+     * @param userId
52
+     * @param personId
53
+     * @return
54
+     */
55
+    TaSharePersonFrom getConsultantLastShare(@Param("orgId") Integer orgId,
56
+                                             @Param("buildingId") String buildingId,
57
+                                             @Param("userId") Integer userId,
58
+                                             @Param("personId") String personId);
47 59
 }

+ 16
- 0
src/main/java/com/huiju/estateagents/service/ITaCustomerFromService.java Ver fichero

@@ -0,0 +1,16 @@
1
+package com.huiju.estateagents.service;
2
+
3
+import com.huiju.estateagents.entity.TaCustomerFrom;
4
+import com.baomidou.mybatisplus.extension.service.IService;
5
+
6
+/**
7
+ * <p>
8
+ * 客户来源  服务类
9
+ * </p>
10
+ *
11
+ * @author yansen
12
+ * @since 2020-04-27
13
+ */
14
+public interface ITaCustomerFromService extends IService<TaCustomerFrom> {
15
+
16
+}

+ 10
- 0
src/main/java/com/huiju/estateagents/service/ITaPersonService.java Ver fichero

@@ -110,4 +110,14 @@ public interface ITaPersonService extends IService<TaPerson> {
110 110
      * @return
111 111
      */
112 112
     Integer savePersonPosition(TaPersonPositon record);
113
+
114
+    void authPhone(Integer orgId,
115
+                   String openid,
116
+                   String phone,
117
+                   String buildingId,
118
+                   String sceneId,
119
+                   String targetType,
120
+                   String targetId,
121
+                   String targetName,
122
+                   String promoter) throws Exception;
113 123
 }

+ 20
- 0
src/main/java/com/huiju/estateagents/service/impl/TaCustomerFromServiceImpl.java Ver fichero

@@ -0,0 +1,20 @@
1
+package com.huiju.estateagents.service.impl;
2
+
3
+import com.huiju.estateagents.entity.TaCustomerFrom;
4
+import com.huiju.estateagents.mapper.TaCustomerFromMapper;
5
+import com.huiju.estateagents.service.ITaCustomerFromService;
6
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
7
+import org.springframework.stereotype.Service;
8
+
9
+/**
10
+ * <p>
11
+ * 客户来源  服务实现类
12
+ * </p>
13
+ *
14
+ * @author yansen
15
+ * @since 2020-04-27
16
+ */
17
+@Service
18
+public class TaCustomerFromServiceImpl extends ServiceImpl<TaCustomerFromMapper, TaCustomerFrom> implements ITaCustomerFromService {
19
+
20
+}

+ 202
- 4
src/main/java/com/huiju/estateagents/service/impl/TaPersonServiceImpl.java Ver fichero

@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
8 8
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
9 9
 import com.huiju.estateagents.base.ResponseBean;
10 10
 import com.huiju.estateagents.center.taUser.entity.TaUser;
11
+import com.huiju.estateagents.center.taUser.mapper.TaUserMapper;
11 12
 import com.huiju.estateagents.center.taUser.service.ITaUserService;
12 13
 import com.huiju.estateagents.common.CommConstant;
13 14
 import com.huiju.estateagents.common.DateUtils;
@@ -64,17 +65,26 @@ public class TaPersonServiceImpl extends ServiceImpl<TaPersonMapper, TaPerson> i
64 65
     TaChatMapper taChatMapper;
65 66
 
66 67
     @Autowired
67
-    private ITaRecommendCustomerService iTaRecommendCustomerService;
68
+    TaUserMapper taUserMapper;
68 69
 
69 70
     @Autowired
70 71
     private TaSaveMapper taSaveMapper;
71 72
 
73
+    @Autowired
74
+    private TaBuildingMapper taBuildingMapper;
75
+
76
+    @Autowired
77
+    private TaCustomerFromMapper taCustomerFromMapper;
78
+
72 79
     @Autowired
73 80
     private TaActivityDynamicEnlistMapper taActivityDynamicEnlistMapper;
74 81
 
75 82
     @Autowired
76 83
     private TaBuildingDynamicMapper taBuildingDynamicMapper;
77 84
 
85
+    @Autowired
86
+    private ITaRecommendCustomerService iTaRecommendCustomerService;
87
+
78 88
     @Autowired
79 89
     private ITaPointsRecordsService pointsRecordsService;
80 90
 
@@ -86,9 +96,6 @@ public class TaPersonServiceImpl extends ServiceImpl<TaPersonMapper, TaPerson> i
86 96
 
87 97
     @Autowired
88 98
     private TaShareContentService taShareContentService;
89
-    
90
-    @Autowired
91
-    private TaBuildingMapper taBuildingMapper;
92 99
 
93 100
 
94 101
     @Resource
@@ -833,6 +840,197 @@ public class TaPersonServiceImpl extends ServiceImpl<TaPersonMapper, TaPerson> i
833 840
         return taPersonMapper.savePersonPosition(record);
834 841
     }
835 842
 
843
+    /**
844
+     * 授权手机号
845
+     * @param orgId
846
+     * @param openid
847
+     * @param phone
848
+     * @param buildingId
849
+     * @param sceneId
850
+     * @param targetType
851
+     * @param targetId
852
+     * @param targetName
853
+     * @param promoter
854
+     * @throws Exception
855
+     */
856
+    @Override
857
+    public void authPhone(Integer orgId, String openid, String phone, String buildingId, String sceneId, String targetType, String targetId, String targetName, String promoter) throws Exception {
858
+        //
859
+        LocalDateTime now = LocalDateTime.now();
860
+
861
+        // 1. 更新当前人员
862
+        List<TaPerson> persons = getPersonsByOpenId(openid);
863
+        if (null == persons || persons.size() != 1) {
864
+            throw new Exception("当前人员 openid 异常");
865
+        }
866
+        TaPerson person = persons.get(0);
867
+
868
+        // 更新人员手机号
869
+        person.setPhone(phone);
870
+        person.setAuthPhoneTime(now);
871
+        if (StringUtils.isEmpty(person.getBuildingId())) {
872
+            person.setBuildingId(buildingId);
873
+        }
874
+        if (CommConstant.PERSON_ESTATE_DRIFT.equals(person.getPersonType())) {
875
+            person.setPersonType(CommConstant.PERSON_ESTATE_CUSTOMER);
876
+        }
877
+        updateById(person);
878
+
879
+        // 2. 发放积分
880
+        applicationContext.publishEvent(new EventBus(person, EventBus.EventType.SignUpAgent, orgId));
881
+
882
+        // 3. 处理推广人
883
+        TaPerson recPerson = taPersonMapper.getById(promoter);
884
+        if (CommConstant.STATUS_DELETE.equals(recPerson.getStatus())) {
885
+            recPerson = null;
886
+        }
887
+
888
+        TaUser taUser = null;
889
+        List<String> withBuildings = null;  // 推广人授权的楼盘
890
+        boolean isAssociated = false;       // 传入的楼盘与推广人是否有关联关系
891
+        if (!StringUtils.isEmpty(promoter)) {
892
+            taUser = taUserMapper.getUserByPerson(orgId, promoter);
893
+            if (null != taUser) {
894
+                List<TaPerson> userPerons = new ArrayList<>();
895
+                userPerons.add(recPerson);
896
+                taUser.setPersonIds(userPerons);
897
+
898
+                withBuildings = taUserMapper.getBuildingIdsOf(taUser.getUserId(), null);
899
+
900
+                if (taUser.getIsAdmin()) {
901
+                    isAssociated = true;
902
+                } else {
903
+                    if (null != withBuildings && withBuildings.size() > 0 && !StringUtils.isEmpty(buildingId)) {
904
+                        isAssociated = withBuildings.contains(buildingId);
905
+                    }
906
+                }
907
+            }
908
+        }
909
+
910
+        // 楼盘
911
+        TaBuilding taBuilding = null;
912
+        if (!StringUtils.isEmpty(buildingId)) {
913
+            taBuilding = taBuildingMapper.selectById(buildingId);
914
+            if (taBuilding.getStatus().equals(CommConstant.STATUS_DELETE)) {
915
+                taBuilding = null;
916
+            }
917
+        }
918
+
919
+        // 3. 处理客户, 没有新增一条记录, 有就依据手机号建立关联
920
+        TaRecommendCustomer customer = mergeCustomerByPhone(person, taUser, taBuilding, isAssociated, now);
921
+
922
+        // 4. 客户来源, 注意不是用户来源
923
+        TaCustomerFrom customerFrom = new TaCustomerFrom();
924
+        customerFrom.setPersonId(person.getPersonId());
925
+        customerFrom.setCustomerId(customer != null ? customer.getCustomerId() :  null);    // 辅助字段, 不必填
926
+        customerFrom.setPersonName(StringUtils.ifNull(person.getName(), person.getNickname()));
927
+        customerFrom.setTargetType(targetType);
928
+        customerFrom.setTargetId(targetId);
929
+        customerFrom.setTargetName(targetName);
930
+        customerFrom.setOrgId(person.getOrgId());
931
+        customerFrom.setSceneId(sceneId);
932
+        customerFrom.setIsOrgFirst(true);   // 授权手机号, 肯定是首次进入
933
+        customerFrom.setCreateDate(now);
934
+
935
+        if (null != taBuilding) {
936
+            customerFrom.setBuildingId(buildingId);
937
+            customerFrom.setBuildingName(taBuilding.getBuildingName());
938
+            customerFrom.setIsProjectFirst(true);
939
+        }
940
+        if (null != recPerson) {
941
+            customerFrom.setSharePersonId(recPerson.getPersonId());
942
+            customerFrom.setSharePersonName(StringUtils.ifNull(recPerson.getName(), recPerson.getNickname()));
943
+        }
944
+
945
+        taCustomerFromMapper.insert(customerFrom);
946
+    }
947
+
948
+
949
+    private TaRecommendCustomer mergeCustomerByPhone(TaPerson person, TaUser taUser, TaBuilding building, boolean isAssociated, LocalDateTime now) throws Exception {
950
+        TaPerson recPerson = null;
951
+        if (null != taUser) {
952
+            recPerson = taUser.getPersonIds().get(0);
953
+        }
954
+
955
+        QueryWrapper<TaRecommendCustomer> query = new QueryWrapper<>();
956
+        query.eq("org_id", person.getOrgId());
957
+        query.eq("phone", person.getPhone());
958
+
959
+        List<TaRecommendCustomer> customers = taRecommendCustomerMapper.selectList(query);
960
+
961
+        // 如果用户不存在, 则新建一个
962
+        // 推广人为 TaUser
963
+        if (null == customers || customers.size() == 0) {
964
+            TaRecommendCustomer customer = copyByPerosn(person, new TaRecommendCustomer());
965
+            customer.setVerifyStatus(CommConstant.VERIFY_AGREE);
966
+            customer.setStatus(CommConstant.CUSTOMER_REPORT);
967
+            customer.setEntryType(CommConstant.ENTRY_INPUT);
968
+            customer.setCreateDate(now);
969
+            if (null != recPerson) {
970
+                customer.setRecommendPerson(recPerson.getPersonId());
971
+            }
972
+
973
+            if (taUser.getIsConsultant()) {
974
+                customer.setRealtyConsultant(taUser.getUserId().toString());
975
+            }
976
+
977
+            if (isAssociated || null == taUser) {
978
+                customer.setBuildingId(building.getBuildingId());
979
+                customer.setIntention(building.getBuildingName());
980
+            }
981
+
982
+            taRecommendCustomerMapper.insert(customer);
983
+            return customer;
984
+        } else {
985
+            for (int i = 0; i < customers.size(); i++) {
986
+                TaRecommendCustomer customer = customers.get(i);
987
+                if (null == customer.getPersonId()) {
988
+                    customer = copyByPerosn(person, customer);
989
+                }
990
+
991
+                if (taUser.getIsConsultant() && StringUtils.isEmpty(customer.getRealtyConsultant())) {
992
+                    customer.setRealtyConsultant(taUser.getUserId().toString());
993
+                }
994
+
995
+                if (isAssociated || null == taUser) {
996
+                    if (StringUtils.isEmpty(customer.getBuildingId())) {
997
+                        customer.setBuildingId(building.getBuildingId());
998
+                    }
999
+                    if (StringUtils.isEmpty(customer.getIntention())) {
1000
+                        customer.setIntention(building.getBuildingName());
1001
+                    }
1002
+                }
1003
+
1004
+                taRecommendCustomerMapper.updateById(customer);
1005
+            }
1006
+            return null;
1007
+        }
1008
+    }
1009
+
1010
+    private TaRecommendCustomer copyByPerosn(TaPerson person, TaRecommendCustomer cust) {
1011
+        cust.setName(StringUtils.ifNull(person.getName(), person.getNickname()));
1012
+        cust.setSex(null == person.getSex() ? str2Int(person.getGender()) : person.getSex());
1013
+        cust.setPhone(StringUtils.ifNull(person.getPhone(), person.getTel()));
1014
+        cust.setPicture(StringUtils.ifNull(person.getAvatarurl(), person.getPhoto()));
1015
+        cust.setCountry(person.getCountry());
1016
+        cust.setCity(person.getCity());
1017
+        cust.setProvince(person.getProvince());
1018
+        cust.setOrgId(person.getOrgId());
1019
+
1020
+        return cust;
1021
+    }
1022
+
1023
+    private Integer str2Int(String str) {
1024
+        if (null == str) {
1025
+            return null;
1026
+        }
1027
+
1028
+        try {
1029
+            return Integer.valueOf(str);
1030
+        } catch (Exception e) {
1031
+            return 0;
1032
+        }
1033
+    }
836 1034
 
837 1035
     public String codeGenerator (){
838 1036
         double r = Math.random();

+ 47
- 0
src/main/java/com/huiju/estateagents/service/impl/TaRecommendCustomerServiceImpl.java Ver fichero

@@ -98,6 +98,12 @@ public class TaRecommendCustomerServiceImpl extends ServiceImpl<TaRecommendCusto
98 98
     @Autowired
99 99
     private TdWxDictMapper tdWxDictMapper;
100 100
 
101
+    @Autowired
102
+    private TaCustomerFromMapper taCustomerFromMapper;
103
+
104
+    @Autowired
105
+    private TaSharePersonFromMapper taSharePersonFromMapper;
106
+
101 107
     @Override
102 108
     public ResponseBean getMyCustList(String openid, String keywords, int pageNumber, int pageSize) {
103 109
         List<TaPerson> taPersons = getPersonsByOpenId(openid);
@@ -448,6 +454,47 @@ public class TaRecommendCustomerServiceImpl extends ServiceImpl<TaRecommendCusto
448 454
 //            iMiniAppService.sendNewCustomerMessage(saleMan, CommConstant.MINIAPP_INDEX, taRecommendCustomer.getName(), taRecommendCustomer.getPhone(), "", taPerson.getName());
449 455
 //        }
450 456
 
457
+        // 首次报备的客户, 写入客户来源表
458
+        if (!StringUtils.isEmpty(taRecommendCustomer.getBuildingId())) {
459
+            QueryWrapper<TaCustomerFrom> queryFrom = new QueryWrapper<>();
460
+            queryFrom.eq("org_id", taRecommendCustomer.getOrgId());
461
+            queryFrom.eq("building_id", taRecommendCustomer.getBuildingId());
462
+            boolean has = taCustomerFromMapper.selectCount(queryFrom) > 0;
463
+            if (!has) {
464
+                TaBuilding taBuilding = taBuildingMapper.selectById(taRecommendCustomer.getBuildingId());
465
+
466
+                TaCustomerFrom customerFrom = new TaCustomerFrom();
467
+                customerFrom.setPersonId(taRecommendCustomer.getPersonId());
468
+                customerFrom.setCustomerId(taRecommendCustomer.getCustomerId());
469
+                customerFrom.setPersonName(taRecommendCustomer.getName());
470
+                customerFrom.setOrgId(taRecommendCustomer.getOrgId());
471
+//              customerFrom.setSceneId(sceneId);
472
+                customerFrom.setIsOrgFirst(false);
473
+                customerFrom.setIsProjectFirst(true);
474
+                customerFrom.setCreateDate(LocalDateTime.now());
475
+                customerFrom.setBuildingId(taRecommendCustomer.getBuildingId());
476
+                customerFrom.setBuildingName(taBuilding.getBuildingName());
477
+                customerFrom.setSharePersonId(consultantPerson.getPersonId());
478
+                customerFrom.setSharePersonName(consultantUser.getUserName());
479
+
480
+                // 半小时内如果有当前人员的分享记录
481
+                // 那么就认为当前客户是通过分享进入的
482
+                TaSharePersonFrom personShare = taSharePersonFromMapper.getConsultantLastShare(taRecommendCustomer.getOrgId(),
483
+                        taRecommendCustomer.getBuildingId(),
484
+                        consultantUser.getUserId(),
485
+                        taRecommendCustomer.getPersonId());
486
+                if (null != personShare) {
487
+                    // 强制转换 targetType
488
+                    String targetType = personShare.getTargetType().replace("_share", "").replace("dynamic", "activity");
489
+                    customerFrom.setTargetType(targetType);
490
+                    customerFrom.setTargetId(personShare.getTargetId());
491
+                    customerFrom.setTargetName(personShare.getTargetName());
492
+                }
493
+
494
+                taCustomerFromMapper.insert(customerFrom);
495
+            }
496
+        }
497
+
451 498
         return ResponseBean.success(taRecommendCustomer);
452 499
     }
453 500
 

+ 5
- 0
src/main/resources/mapper/TaCustomerFromMapper.xml Ver fichero

@@ -0,0 +1,5 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
3
+<mapper namespace="com.huiju.estateagents.mapper.TaCustomerFromMapper">
4
+
5
+</mapper>

+ 14
- 0
src/main/resources/mapper/TaSharePersonFromMapper.xml Ver fichero

@@ -74,4 +74,18 @@
74 74
         GROUP BY t.target_id,t.target_type,t.person_id,t.share_person
75 75
         order by t.create_date desc
76 76
     </select>
77
+
78
+    <select id="getConsultantLastShare" resultType="com.huiju.estateagents.entity.TaSharePersonFrom">
79
+        SELECT *
80
+        FROM
81
+            ta_share_person_from t
82
+        WHERE
83
+            t.org_id = #{orgId}
84
+            AND t.building_id = #{buildingId}
85
+            AND t.share_person = #{userId}
86
+            AND t.person_id = #{personId}
87
+            AND t.create_date &gt; DATE_SUB( now( ), INTERVAL 30 MINUTE )
88
+        ORDER BY t.create_date DESC
89
+        LIMIT 1
90
+    </select>
77 91
 </mapper>

+ 13
- 0
src/main/resources/mapper/TaUserMapper.xml Ver fichero

@@ -133,4 +133,17 @@
133 133
         </if>
134 134
     </select>
135 135
 
136
+    <select id="getUserByPerson" resultType="com.huiju.estateagents.center.taUser.entity.TaUser">
137
+        SELECT
138
+            t.*
139
+        FROM
140
+            ta_user t
141
+        INNER JOIN ta_person s ON s.org_id = #{orgId} AND s.user_id = t.user_id
142
+        WHERE
143
+            t.org_id = #{orgId}
144
+        AND s.person_id = #{personId}
145
+        AND t.status &gt; -1
146
+        Limit 1
147
+    </select>
148
+
136 149
 </mapper>

+ 5
- 9
src/main/resources/mapper/TsConsultantKpiMapper.xml Ver fichero

@@ -155,21 +155,17 @@
155 155
         SELECT
156 156
             t.*,
157 157
             e.create_date as visit_time
158
-        FROM ta_share_person_from e
158
+        FROM ta_customer_from e
159 159
         INNER JOIN ta_person t ON t.person_id = e.person_id
160 160
         WHERE e.org_id = #{orgId}
161
-        AND e.share_person = #{userId}
162
-        AND (
163
-            e.target_type IN ( 'card_share', 'building_share', 'dynamic_share', 'group_share', 'h5_share', 'help_share', 'house_share', 'live_share', 'news_share', 'poster' )
164
-            or ( e.target_type = 'share' and e.target_id = 'index' )
165
-        )
166
-        AND e.create_date BETWEEN #{startDate} and #{endDate}
167 161
         <if test="buildingId != null and buildingId !=''">
168 162
             AND e.building_id = #{buildingId}
169 163
         </if>
170
-        AND e.is_first_time = 1
164
+        AND e.target_type is not null
165
+        AND e.create_date BETWEEN #{startDate} and #{endDate}
166
+        AND e.is_project_first = 1
167
+        AND t.user_id = #{userId}
171 168
 
172
-        AND t.phone is not null
173 169
         AND t.person_type != 'Realty Consultant'
174 170
 
175 171
 <!--        为了与存储过程一致 -->