yansen před 5 roky
rodič
revize
e79a8bec30

+ 1
- 0
src/main/java/com/huiju/estateagents/mapper/TaPersonBuildingMapper.java Zobrazit soubor

@@ -26,4 +26,5 @@ public interface TaPersonBuildingMapper extends BaseMapper<TaPersonBuilding> {
26 26
     List<SalesExport> selectSalesList(@Param("orgId") Integer orgId,@Param("buildingId") String buildingId, @Param("startCreateDate")  String startCreateDate,@Param("endCreateDate") String endCreateDate, @Param("personBuildingList") List<TaPersonBuilding> taPersonBuildingList);
27 27
 
28 28
     List<TaBuilding> getBuildingsOf(@Param("personOrUser") String personOrUser);
29
+
29 30
 }

+ 19
- 0
src/main/java/com/huiju/estateagents/mapper/TaRecommendCustomerMapper.java Zobrazit soubor

@@ -218,6 +218,16 @@ public interface TaRecommendCustomerMapper extends BaseMapper<TaRecommendCustome
218 218
 
219 219
     IPage<TaRecommendCustomer>getCustomersIRecommended(IPage<TaRecommendCustomer> page,@Param("customerId")String customerId,@Param("status")Integer status,@Param("orgId") Integer orgId,@Param("personBuildingList") List<TaPersonBuilding> personBuildingList);
220 220
 
221
+    /**
222
+     * @param page
223
+     * @param orgId
224
+     * @param userId
225
+     * @param buildingId
226
+     * @param startDate
227
+     * @param endDate
228
+     * @param personId
229
+     * @return
230
+     */
221 231
     IPage<TaRecommendCustomer> getCustomerListOfConsultant(IPage<TaRecommendCustomer> page,
222 232
                                                            @Param("orgId") Integer orgId,
223 233
                                                            @Param("userId") String userId,
@@ -247,4 +257,13 @@ public interface TaRecommendCustomerMapper extends BaseMapper<TaRecommendCustome
247 257
      */
248 258
     List<TaRecommendCustomer> getConsultantCustomerList(@Param("userId") Integer userId,@Param("personId") String personId,@Param("buildingId") String buildingId,@Param("orgId") Integer orgId);
249 259
 
260
+    /**
261
+     * 校验客户存在记录
262
+     * @param orgId
263
+     * @param personId
264
+     * @param consultBuildingIds
265
+     * @param buildingId
266
+     * @return
267
+     */
268
+    Map<String, Number> checkCustomerBy(@Param("orgId") Integer orgId, @Param("personId") String personId, @Param("consultBuildingIds") List<String> consultBuildingIds, @Param("buildingId") String buildingId);
250 269
 }

+ 14
- 3
src/main/java/com/huiju/estateagents/service/ITaRecommendCustomerService.java Zobrazit soubor

@@ -4,9 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
4 4
 import com.baomidou.mybatisplus.extension.service.IService;
5 5
 import com.huiju.estateagents.base.ResponseBean;
6 6
 import com.huiju.estateagents.center.taUser.entity.TaUser;
7
-import com.huiju.estateagents.entity.TaPerson;
8
-import com.huiju.estateagents.entity.TaPersonBuilding;
9
-import com.huiju.estateagents.entity.TaRecommendCustomer;
7
+import com.huiju.estateagents.entity.*;
10 8
 import com.huiju.estateagents.excel.AgentsRecommendCustomer;
11 9
 import com.huiju.estateagents.excel.ExcelRecommendCustomer;
12 10
 import com.huiju.estateagents.excel.ReporRecommendCustomer;
@@ -177,4 +175,17 @@ public interface ITaRecommendCustomerService extends IService<TaRecommendCustome
177 175
      * @return
178 176
      */
179 177
     List<TaRecommendCustomer> getConsultantCustomerList(Integer userId, String personId, String buildingId, Integer orgId, List<TaPersonBuilding> taPersonBuildingListByUserId);
178
+
179
+    /**
180
+     * 生成新客户信息
181
+     * @param orgId
182
+     * @param person
183
+     * @param recommender
184
+     * @param consultant
185
+     * @param building
186
+     * @param from
187
+     * @return
188
+     * @throws Exception
189
+     */
190
+    List<TaRecommendCustomer> newCustomer(Integer orgId, TaPerson person, TaPerson recommender, TaUser consultant, TaBuilding building, TaCustomerFrom from) throws Exception;
180 191
 }

+ 17
- 83
src/main/java/com/huiju/estateagents/service/impl/TaPersonServiceImpl.java Zobrazit soubor

@@ -910,109 +910,43 @@ public class TaPersonServiceImpl extends ServiceImpl<TaPersonMapper, TaPerson> i
910 910
         }
911 911
         updateById(person);
912 912
 
913
-        // 只要授权手机号, 就是客户
914
-        // 或者 依据手机号反更新推荐客户中 person_id
915
-        // 默认场景, 普通人推荐
916
-        TaRecommendCustomer customer = newOrFixCustomerBy(person, promoter, buildingId);
917
-
918
-        // 发放积分
919
-        applicationContext.publishEvent(new EventBus(person, EventBus.EventType.SignUpAgent, orgId));
920
-
921
-        //授权手机给推广人加积分
922
-        String sharePersonId = getSharePersonFrom(person);
923
-        if (validateSceneId(sceneId) && !StringUtils.isEmpty(sharePersonId)){
924
-            applicationContext.publishEvent(new EventBus(promoter != null ? promoter : sharePersonId, EventBus.EventType.SharePosterAll, orgId));
925
-        }
913
+        // 关联推荐客户
914
+        fixCustomerPersonId(person);
926 915
 
927 916
         // 客户来源
928 917
         TaCustomerFrom customerFrom = new TaCustomerFrom();
929 918
         customerFrom.setPersonId(person.getPersonId());
930 919
         customerFrom.setPersonName(StringUtils.ifNull(person.getName(), person.getNickname()));
931
-        customerFrom.setCustomerId(customer.getCustomerId());
932 920
         customerFrom.setTargetType(targetType);
933 921
         customerFrom.setTargetId(targetId);
934 922
         customerFrom.setTargetName(targetName);
935 923
         customerFrom.setOrgId(orgId);
936 924
         customerFrom.setSceneId(sceneId);
937
-        customerFrom.setIsOrgFirst(true);   // 授权手机号, 肯定是第一次
938
-        customerFrom.setIsProjectFirst(false);
939 925
         customerFrom.setCreateDate(now);
940 926
 
941 927
         // 推广人
942 928
         TaPerson recPerson = StringUtils.isEmpty(promoter) ? null : taPersonMapper.getById(promoter);
929
+        // 推荐楼盘
930
+        TaBuilding building = StringUtils.isEmpty(buildingId) ? null : taBuildingMapper.selectById(buildingId);
943 931
         // 是否置业顾问
944 932
         boolean isConsultant = null != recPerson && CommConstant.PERSON_REALTY_CONSULTANT.equals(recPerson.getPersonType());
945
-        // 推广人授权的楼盘
946
-        List<String> withBuildings = isConsultant ? taUserMapper.getBuildingIdsOf(recPerson.getUserId(), null) : null;
947
-        // 推荐楼盘
948
-        TaBuilding recBuilding = StringUtils.isEmpty(buildingId) ? null : taBuildingMapper.selectById(buildingId);
949
-
950
-        // 传入的楼盘与推广人是否有关联关系
951
-        boolean isAssociated = null != withBuildings && withBuildings.contains(buildingId);
952
-
953
-        // 如果有推荐楼盘
954
-        if (null != recBuilding) {
955
-            customerFrom.setBuildingId(buildingId);
956
-            customerFrom.setBuildingName(recBuilding.getBuildingName());
957
-            customerFrom.setIsProjectFirst(true);
958
-
959
-            // 客户没楼盘 - 小程序级别公客, 则变成项目级别公客
960
-            if (StringUtils.isEmpty(customer.getBuildingId())) {
961
-                customer.setBuildingId(buildingId);
933
+        TaUser consultant = isConsultant ? taUserMapper.selectById(recPerson.getUserId()) : null;
962 934
 
963
-                // 如果项目跟推广人是关联关系, 那么就是私客
964
-                if (isAssociated) {
965
-                    customer.setRealtyConsultant(recPerson.getUserId().toString());
966
-                }
967
-
968
-                taRecommendCustomerMapper.updateById(customer);
969
-            }
970
-        }
971
-
972
-        // 推荐人不为空
973
-        if (null != recPerson) {
974
-            customerFrom.setSharePersonId(recPerson.getPersonId());
975
-            customerFrom.setSharePersonName(recPerson.getNickname());
976
-
977
-            // 如果没有关联关系
978
-            // 置业顾问推荐其他楼盘, 那么需要生成该置业的私客
979
-            if (isConsultant && !isAssociated) {
980
-                String consultantBuildingId = null != withBuildings ? withBuildings.get(0) : null;
981
-                if (!StringUtils.isEmpty(consultantBuildingId)) {
982
-                    TaBuilding onsultantBuilding = taBuildingMapper.selectById(consultantBuildingId);
983
-                    TaRecommendCustomer newCustomer = copyByPerosn(person, new TaRecommendCustomer());
984
-                    newCustomer.setBuildingId(onsultantBuilding.getBuildingId());
985
-                    newCustomer.setRealtyConsultant(recPerson.getUserId().toString());
986
-                    newCustomer.setRecommendPerson(recPerson.getPersonId());
987
-                    newCustomer.setVerifyStatus(CommConstant.VERIFY_AGREE);
988
-                    newCustomer.setStatus(CommConstant.CUSTOMER_REPORT);
989
-                    newCustomer.setEntryType(CommConstant.ENTRY_INPUT);
990
-                    newCustomer.setCreateDate(now);
991
-                    newCustomer.setReportDate(now);
992
-                    taRecommendCustomerMapper.insert(newCustomer);
993
-
994
-                    TaCustomerFrom customerFrom2 = new TaCustomerFrom();
995
-                    customerFrom2.setPersonId(person.getPersonId());
996
-                    customerFrom2.setPersonName(StringUtils.ifNull(person.getName(), person.getNickname()));
997
-                    customerFrom2.setCustomerId(newCustomer.getCustomerId());
998
-                    customerFrom2.setBuildingId(onsultantBuilding.getBuildingId());
999
-                    customerFrom2.setBuildingName(onsultantBuilding.getBuildingName());
1000
-                    customerFrom2.setSharePersonId(recPerson.getPersonId());
1001
-                    customerFrom2.setSharePersonName(recPerson.getNickname());
1002
-                    customerFrom2.setTargetType(targetType);
1003
-                    customerFrom2.setTargetId(targetId);
1004
-                    customerFrom2.setTargetName(targetName);
1005
-                    customerFrom2.setOrgId(orgId);
1006
-                    customerFrom2.setSceneId(sceneId);
1007
-                    customerFrom2.setIsOrgFirst(true);
1008
-                    customerFrom2.setIsProjectFirst(true);
1009
-                    customerFrom2.setCreateDate(now);
1010
-                    taCustomerFromMapper.insert(customerFrom2);
935
+        try {
936
+            List<TaRecommendCustomer> customerList = iTaRecommendCustomerService.newCustomer(orgId, person, recPerson, consultant, building, customerFrom);
937
+            if (customerList.size() > 0) {
938
+                // 发放积分
939
+                applicationContext.publishEvent(new EventBus(person, EventBus.EventType.SignUpAgent, orgId));
940
+
941
+                //授权手机给推广人加积分
942
+                String sharePersonId = getSharePersonFrom(person);
943
+                if (validateSceneId(sceneId) && !StringUtils.isEmpty(sharePersonId)){
944
+                    applicationContext.publishEvent(new EventBus(promoter != null ? promoter : sharePersonId, EventBus.EventType.SharePosterAll, orgId));
1011 945
                 }
1012 946
             }
947
+        } catch (Exception e) {
948
+            throw e;
1013 949
         }
1014
-
1015
-        taCustomerFromMapper.insert(customerFrom);
1016 950
     }
1017 951
 
1018 952
     private TaRecommendCustomer newOrFixCustomerBy(TaPerson person, String promoter, String buildingId) {

+ 131
- 0
src/main/java/com/huiju/estateagents/service/impl/TaRecommendCustomerServiceImpl.java Zobrazit soubor

@@ -29,12 +29,17 @@ import org.apache.commons.collections.CollectionUtils;
29 29
 import org.slf4j.Logger;
30 30
 import org.slf4j.LoggerFactory;
31 31
 import org.springframework.beans.factory.annotation.Autowired;
32
+import org.springframework.cglib.beans.BeanCopier;
32 33
 import org.springframework.stereotype.Service;
33 34
 
34 35
 import java.time.LocalDateTime;
36
+import java.util.ArrayList;
35 37
 import java.util.HashMap;
36 38
 import java.util.List;
37 39
 import java.util.Map;
40
+import java.util.stream.Collector;
41
+import java.util.stream.Collectors;
42
+import java.util.stream.Stream;
38 43
 
39 44
 /**
40 45
  * <p>
@@ -168,6 +173,132 @@ public class TaRecommendCustomerServiceImpl extends ServiceImpl<TaRecommendCusto
168 173
         return taRecommendCustomerMapper.getConsultantCustomerList(userId, personId, buildingId, orgId);
169 174
     }
170 175
 
176
+    @Override
177
+    public List<TaRecommendCustomer> newCustomer(Integer orgId, TaPerson person, TaPerson recommender, TaUser consultant, TaBuilding building, TaCustomerFrom from) throws Exception {
178
+        // 如果置业推荐了非自己绑定楼盘, 会生成 2 条客户记录
179
+        List<TaRecommendCustomer> result = new ArrayList<>();
180
+        List<TaBuilding> consultBuildings = null;
181
+        List<String> consultBuildingIds = null;
182
+        if (null != consultant) {
183
+            consultBuildings = taPersonBuildingMapper.getBuildingsOf(consultant.getUserId().toString());
184
+            if (null != consultBuildings && consultBuildings.size() > 0) {
185
+                consultBuildingIds = consultBuildings.stream().map(TaBuilding::getBuildingId).collect(Collectors.toList());
186
+            }
187
+        }
188
+
189
+        Map<String, Number> checkNum = taRecommendCustomerMapper.checkCustomerBy(orgId, person.getPersonId(), consultBuildingIds, null != building ? building.getBuildingId() : null);
190
+        boolean hasOrgCust = checkNum.get("orgNum").intValue() > 0;
191
+        boolean hasConsultCust = checkNum.get("consultNum").intValue() > 0;
192
+        boolean hasBuildingCust = checkNum.get("buildingNum").intValue() > 0;
193
+        LocalDateTime now = LocalDateTime.now();
194
+
195
+        // 控制是否需要插入小程序级别公客
196
+        boolean inserted = false;
197
+        // 置业与楼盘是否有关联关系
198
+        boolean builingAssociated = false;
199
+
200
+        // 私客
201
+        if (null != consultant && !hasConsultCust && null != consultBuildings) {
202
+            TaBuilding taBuilding = null;
203
+            if (consultBuildingIds.contains(null != building ? building.getBuildingId() : null)) {
204
+                taBuilding = building;
205
+                builingAssociated = true;
206
+            } else {
207
+                taBuilding = consultBuildings.get(0);
208
+            }
209
+
210
+            TaRecommendCustomer customer = copyFromPerosn(person, new TaRecommendCustomer());
211
+            fillSomeFieldsOfCustomer(customer, recommender, now);
212
+            customer.setBuildingId(taBuilding.getBuildingId());
213
+            customer.setBuildingName(taBuilding.getBuildingName());
214
+            customer.setRealtyConsultant(consultant.getUserId().toString());
215
+            taRecommendCustomerMapper.insert(customer);
216
+            result.add(customer);
217
+            inserted = true;
218
+
219
+            TaCustomerFrom customerFrom = copyPropertiesFrom(from);
220
+            customerFrom.setCustomerId(customer.getCustomerId());
221
+            customerFrom.setSharePersonId(recommender.getPersonId());
222
+            customerFrom.setSharePersonName(StringUtils.ifNull(recommender.getName(), recommender.getNickname()));
223
+            customerFrom.setBuildingId(taBuilding.getBuildingId());
224
+            customerFrom.setBuildingName(taBuilding.getBuildingName());
225
+            customerFrom.setIsOrgFirst(!hasOrgCust);
226
+            customerFrom.setIsProjectFirst(true);
227
+            customerFrom.setCreateDate(now);
228
+            taCustomerFromMapper.insert(customerFrom);
229
+        }
230
+
231
+        // 项目公客
232
+        if (null != building && !hasBuildingCust && !builingAssociated) {
233
+            TaRecommendCustomer customer = copyFromPerosn(person, new TaRecommendCustomer());
234
+            fillSomeFieldsOfCustomer(customer, recommender, now);
235
+            customer.setBuildingId(building.getBuildingId());
236
+            taRecommendCustomerMapper.insert(customer);
237
+            result.add(customer);
238
+            inserted = true;
239
+
240
+            TaCustomerFrom customerFrom = copyPropertiesFrom(from);
241
+            customerFrom.setCustomerId(customer.getCustomerId());
242
+            customerFrom.setSharePersonId(null == recommender ? null : recommender.getPersonId());
243
+            customerFrom.setSharePersonName(null == recommender ? null : StringUtils.ifNull(recommender.getName(), recommender.getNickname()));
244
+            customerFrom.setBuildingId(building.getBuildingId());
245
+            customerFrom.setBuildingName(building.getBuildingName());
246
+            customerFrom.setIsOrgFirst(!hasOrgCust);
247
+            customerFrom.setIsProjectFirst(true);
248
+            customerFrom.setCreateDate(now);
249
+            taCustomerFromMapper.insert(customerFrom);
250
+        }
251
+
252
+        // 小程序公客
253
+        if (!hasOrgCust && !inserted) {
254
+            TaRecommendCustomer customer = copyFromPerosn(person, new TaRecommendCustomer());
255
+            fillSomeFieldsOfCustomer(customer, recommender, now);
256
+            taRecommendCustomerMapper.insert(customer);
257
+            result.add(customer);
258
+
259
+            TaCustomerFrom customerFrom = copyPropertiesFrom(from);
260
+            customerFrom.setCustomerId(customer.getCustomerId());
261
+            customerFrom.setSharePersonId(null == recommender ? null : recommender.getPersonId());
262
+            customerFrom.setSharePersonName(null == recommender ? null : StringUtils.ifNull(recommender.getName(), recommender.getNickname()));
263
+            customerFrom.setIsOrgFirst(true);
264
+            customerFrom.setIsProjectFirst(false);
265
+            customerFrom.setCreateDate(now);
266
+            taCustomerFromMapper.insert(customerFrom);
267
+        }
268
+
269
+        return result;
270
+    }
271
+
272
+    private void fillSomeFieldsOfCustomer(TaRecommendCustomer customer, TaPerson recommender, LocalDateTime now) {
273
+        customer.setVerifyStatus(CommConstant.VERIFY_AGREE);
274
+        customer.setStatus(CommConstant.CUSTOMER_REPORT);
275
+        customer.setEntryType(null == recommender ? CommConstant.ENTRY_VOLUNTEER : CommConstant.ENTRY_INPUT);
276
+        customer.setCreateDate(now);
277
+        customer.setReportDate(now);
278
+        customer.setRecommendPerson(null == recommender ? null : recommender.getPersonId());
279
+    }
280
+
281
+    private TaRecommendCustomer copyFromPerosn(TaPerson person, TaRecommendCustomer cust) {
282
+        cust.setPersonId(person.getPersonId());
283
+        cust.setName(StringUtils.ifNull(person.getName(), person.getNickname()));
284
+        cust.setSex(null == person.getSex() ? str2Int(person.getGender()) : person.getSex());
285
+        cust.setPhone(StringUtils.ifNull(person.getPhone(), person.getTel()));
286
+        cust.setPicture(StringUtils.ifNull(person.getAvatarurl(), person.getPhoto()));
287
+        cust.setCountry(person.getCountry());
288
+        cust.setCity(person.getCity());
289
+        cust.setProvince(person.getProvince());
290
+        cust.setOrgId(person.getOrgId());
291
+
292
+        return cust;
293
+    }
294
+
295
+    private TaCustomerFrom copyPropertiesFrom(TaCustomerFrom from) {
296
+        BeanCopier copier = BeanCopier.create(TaCustomerFrom.class, TaCustomerFrom.class, false);
297
+        TaCustomerFrom to = new TaCustomerFrom();
298
+        copier.copy(from, to, null);
299
+        return to;
300
+    }
301
+
171 302
     @Override
172 303
     public ResponseBean getCustDetail(String id) {
173 304
         TaRecommendCustomer taRecommendCustomer = taRecommendCustomerMapper.selectById(id);

+ 23
- 0
src/main/resources/mapper/TaRecommendCustomerMapper.xml Zobrazit soubor

@@ -922,4 +922,27 @@
922 922
         AND t.verify_status = 1
923 923
         AND t.realty_consultant IN ( #{userId}, #{personId})
924 924
     </select>
925
+
926
+    <select id="checkCustomerBy" resultType="java.util.Map">
927
+        SELECT
928
+            count( 1 ) AS orgNum,
929
+
930
+        <!--   sum( IF ( t.building_id IN ( 'foo', 'bar' ), 1, 0 ) ) AS consultNum,     -->
931
+        <choose>
932
+            <when test="consultBuildingIds != null and consultBuildingIds.size > 0">
933
+                sum( IF ( t.building_id IN <foreach collection="consultBuildingIds" item="id" open="(" close=")" separator=",">#{id}</foreach>
934
+            </when>
935
+            <otherwise>
936
+                sum( IF ( t.building_id IN ('****')
937
+            </otherwise>
938
+        </choose>
939
+            , 1, 0 ) ) AS consultNum,
940
+
941
+            sum( IF ( t.building_id = #{buildingId}, 1, 0 ) ) AS buildingNum
942
+        FROM
943
+            ta_recommend_customer t
944
+        WHERE
945
+            t.org_id = #{orgId}
946
+            AND t.person_id = #{personId}
947
+    </select>
925 948
 </mapper>