diff --git a/coolstore-partner-common/src/main/java/com/cool/store/constants/ExcelErrorConstants.java b/coolstore-partner-common/src/main/java/com/cool/store/constants/ExcelErrorConstants.java index eb3b563d6..f461fb4e0 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/constants/ExcelErrorConstants.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/constants/ExcelErrorConstants.java @@ -29,4 +29,6 @@ public class ExcelErrorConstants { public static final String COUNT_MORE = "每次数据最多导入500条,请分批上传"; + public static final String MOBILE_REPEAT = "手机号重复"; + } diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerBaseInfoMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerBaseInfoMapper.java index 712ea26d4..767803b35 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerBaseInfoMapper.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerBaseInfoMapper.java @@ -1,6 +1,7 @@ package com.cool.store.mapper; import com.cool.store.entity.HyPartnerBaseInfoDO; +import com.cool.store.entity.SyncEcCustomerLabelDO; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -63,4 +64,10 @@ public interface HyPartnerBaseInfoMapper { @Param("idCardPhotoBlack") String idCardPhotoBlack, @Param("partnerLineId") Long partnerLineId); + int selectAllList(); + + List selectListByLimit(@Param("limit1") Integer limit1, @Param("limit2") Integer limit2); + + void updateByMobile(HyPartnerBaseInfoDO record); + } \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/HyPartnerBaseInfoMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerBaseInfoMapper.xml index 44a5e732d..9f3b37de8 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/HyPartnerBaseInfoMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerBaseInfoMapper.xml @@ -297,6 +297,12 @@ left join hy_partner_line_info b on a.partner_line_id = b.id where a.id_card = #{idCard} and ( b.line_status != 3 and b.deleted = 0 ) + + update hy_partner_base_info @@ -306,5 +312,15 @@ id_card_photo_black = #{idCardPhotoBlack} where partner_line_id = #{partnerLineId} + + update hy_partner_base_info + + update_time=now(), + + user_portrait = #{userPortrait}, + + + where mobile = #{mobile} + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/HyPartnerUserInfoMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerUserInfoMapper.xml index aded113d2..6cb81f7f8 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/HyPartnerUserInfoMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerUserInfoMapper.xml @@ -55,18 +55,23 @@ diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerLabelDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerLabelDO.java index 4f0d4d383..6dc765b14 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerLabelDO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerLabelDO.java @@ -5,6 +5,7 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; import java.util.Date; @@ -16,6 +17,7 @@ import java.util.Date; @Builder @NoArgsConstructor @AllArgsConstructor +@Accessors(chain = true) public class HyPartnerLabelDO { @ApiModelProperty("") private Long id; diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerLabelGroupDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerLabelGroupDO.java index 2ee131d72..b46f428f5 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerLabelGroupDO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerLabelGroupDO.java @@ -5,6 +5,7 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; import java.util.Date; @@ -16,6 +17,7 @@ import java.util.Date; @Builder @NoArgsConstructor @AllArgsConstructor +@Accessors(chain = true) public class HyPartnerLabelGroupDO { @ApiModelProperty("id") diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/SyncEcCustomerLabelDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/SyncEcCustomerLabelDO.java new file mode 100644 index 000000000..05e5e6c24 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/SyncEcCustomerLabelDO.java @@ -0,0 +1,16 @@ +package com.cool.store.entity; + +import lombok.Data; +import lombok.experimental.Accessors; + +@Data +@Accessors(chain = true) +public class SyncEcCustomerLabelDO { + + + private String mobile; + + private String userPortrait; + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/GetTagRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/GetTagRequest.java new file mode 100644 index 000000000..d1dba4f3d --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/GetTagRequest.java @@ -0,0 +1,27 @@ +package com.cool.store.request; + +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.List; + +/** + * @author hxd + */ +@Data +@Accessors(chain = true) +public class GetTagRequest { + private Long groupId; + private String groupName; + private Integer sort; + private Integer type; + private List list; + + @Data + @Accessors(chain = true) + public static class GetTagItem{ + private Long classId; + private String className; + private int sort; + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/job/SyncEcCustomerLabelJob.java b/coolstore-partner-service/src/main/java/com/cool/store/job/SyncEcCustomerLabelJob.java new file mode 100644 index 000000000..3ae52a0df --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/job/SyncEcCustomerLabelJob.java @@ -0,0 +1,91 @@ +package com.cool.store.job; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import com.cool.store.entity.HyPartnerBaseInfoDO; +import com.cool.store.entity.SyncEcCustomerDO; +import com.cool.store.entity.SyncEcCustomerLabelDO; +import com.cool.store.mapper.HyPartnerBaseInfoMapper; +import com.cool.store.sdk.ec.EcClient; +import com.cool.store.sdk.ec.request.SyncEcCustomerLabelRequest; +import com.cool.store.sdk.ec.request.SyncEcCustomerRequest; +import com.cool.store.sdk.ec.response.SyncEcCustomerLabelResponse; +import com.cool.store.service.HyPartnerBaseInfoService; +import com.cool.store.utils.MybatisBatchUtils; +import com.cool.store.utils.StringUtil; +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.Resource; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @author hxd + */ +@Slf4j +@Component +public class SyncEcCustomerLabelJob { + + @Value("${ec.baseUrl:null}") + private String baseUrl; + + @Resource + private HyPartnerBaseInfoMapper hyPartnerBaseInfoMapper; + + @XxlJob("SyncEcCustomerLabelJob") + public void execute() { + XxlJobHelper.log("-------------------------------同步ec客户标签数据到小程序开始-------------------------------"); + syncEcLabelExecute(); + XxlJobHelper.log("-------------------------------同步ec标签数据到小程序结束-------------------------------"); + XxlJobHelper.handleSuccess(); + } + + @Autowired + private MybatisBatchUtils mybatisBatchUtils; + + private final Integer count = 20; + + /** + * 同步ec标签到招商数据库中 + */ + private void syncEcLabelExecute() { + //获取总数 + int size = hyPartnerBaseInfoMapper.selectAllList(); + //执行数 + int counts = size / count; + //取余,如果大于1,就再加一 + int yu = size % count; + if (yu > 0) { + counts += 1; + } + for (int i = 1; i <= counts; i++) { + XxlJobHelper.log("执行limit1:" + count * (i - 1) + ",执行limit2:" + count); + List list = hyPartnerBaseInfoMapper.selectListByLimit(count * (i - 1), count); + SyncEcCustomerLabelRequest syncEcCustomerLabelRequest = new SyncEcCustomerLabelRequest(); + syncEcCustomerLabelRequest.setParameter(list); + EcClient ecClient = new EcClient(); + SyncEcCustomerLabelResponse exec = ecClient.exec(baseUrl, syncEcCustomerLabelRequest); + if (ObjectUtil.isNull(exec)) { + continue; + } + List execList = exec.getData(); + if (CollectionUtils.isEmpty(execList)) { + continue; + } + List collect = execList.stream().map((item) -> { + HyPartnerBaseInfoDO hyPartnerBaseInfoDO = new HyPartnerBaseInfoDO(); + BeanUtil.copyProperties(item, hyPartnerBaseInfoDO); + return hyPartnerBaseInfoDO; + }).collect(Collectors.toList()); + mybatisBatchUtils.batchInsertOrUpdate(collect, HyPartnerBaseInfoMapper.class, (record, mapper) -> mapper.updateByMobile(record)); + } + } + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/sdk/ec/request/SyncEcCustomerLabelRequest.java b/coolstore-partner-service/src/main/java/com/cool/store/sdk/ec/request/SyncEcCustomerLabelRequest.java new file mode 100644 index 000000000..10ec923f0 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/sdk/ec/request/SyncEcCustomerLabelRequest.java @@ -0,0 +1,21 @@ +package com.cool.store.sdk.ec.request; + +import com.cool.store.sdk.ec.core.EcRequest; +import com.cool.store.sdk.ec.response.SyncEcCustomerLabelResponse; + +/** + * @author hxd + */ +public class SyncEcCustomerLabelRequest extends EcRequest { + + @Override + public String getApiUrl() { + return "/ec/appletToEcLabel"; + } + + + @Override + public Class getResponseClass() { + return SyncEcCustomerLabelResponse.class; + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/sdk/ec/response/SyncEcCustomerLabelResponse.java b/coolstore-partner-service/src/main/java/com/cool/store/sdk/ec/response/SyncEcCustomerLabelResponse.java new file mode 100644 index 000000000..bff4190f0 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/sdk/ec/response/SyncEcCustomerLabelResponse.java @@ -0,0 +1,22 @@ +package com.cool.store.sdk.ec.response; + + +import com.cool.store.entity.SyncEcCustomerLabelDO; +import com.cool.store.sdk.ec.core.EcResponse; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.util.List; + +/** + * @author hxd + */ +@EqualsAndHashCode(callSuper = true) +@Data +@Accessors(chain = true) +public class SyncEcCustomerLabelResponse extends EcResponse { + + private List data; + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/EcSyncService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/EcSyncService.java index 1901fd924..050fd0eb0 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/EcSyncService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/EcSyncService.java @@ -1,6 +1,7 @@ package com.cool.store.service; import com.cool.store.request.CustomerInfoRequest; +import com.cool.store.request.GetTagRequest; import java.util.List; @@ -8,4 +9,7 @@ public interface EcSyncService { boolean ecToApplet(List queryListData); void getChannelSource(); + + Boolean labelInfo(List getTagRequestList); + } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/LabelGroupService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/LabelGroupService.java index 1e2b882c1..5f5bf2aef 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/LabelGroupService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/LabelGroupService.java @@ -4,6 +4,7 @@ import com.cool.store.dto.label.LabelGroupAddDTO; import com.cool.store.dto.label.LabelGroupDeleteDTO; import com.cool.store.dto.label.LabelGroupListDTO; import com.cool.store.dto.label.LabelGroupUpdateDTO; +import com.cool.store.entity.HyPartnerLabelGroupDO; import com.cool.store.exception.ApiException; import com.cool.store.vo.LabelGroupListVo; @@ -44,4 +45,12 @@ public interface LabelGroupService { */ List getAllLabelGroupList(); + /** + * 添加ec标签组 + * @param hyPartnerLabelGroupDO + */ + void addEcLabelGroup(HyPartnerLabelGroupDO hyPartnerLabelGroupDO); + + HyPartnerLabelGroupDO selectByPrimaryKey(Long id); + } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/LabelService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/LabelService.java index 898f71d03..16b3d3a1f 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/LabelService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/LabelService.java @@ -4,6 +4,7 @@ import com.cool.store.dto.label.LabelAddDTO; import com.cool.store.dto.label.LabelDeleteDTO; import com.cool.store.dto.label.LabelListDTO; import com.cool.store.dto.label.LabelUpdateDTO; +import com.cool.store.entity.HyPartnerLabelDO; import com.cool.store.exception.ApiException; import com.cool.store.vo.LabelListVo; @@ -55,4 +56,9 @@ public interface LabelService { * @param dto */ void deleteLabel(LabelDeleteDTO dto); + + HyPartnerLabelDO selectByPrimaryKey(Long classId); + + void addEcLabel(HyPartnerLabelDO hyPartnerLabelDO); + } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/EcSyncServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/EcSyncServiceImpl.java index fb273e541..fd73adfdf 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/EcSyncServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/EcSyncServiceImpl.java @@ -9,14 +9,18 @@ import com.cool.store.dao.EnterpriseUserDAO; import com.cool.store.dao.HyPartnerBaseInfoDAO; import com.cool.store.dao.HyPartnerLineInfoDAO; import com.cool.store.dao.HyPartnerUserInfoDAO; +import com.cool.store.dto.partner.LineCountDTO; import com.cool.store.entity.*; import com.cool.store.enums.LineStatusEnum; import com.cool.store.enums.WorkflowStageEnum; import com.cool.store.enums.WorkflowStatusEnum; import com.cool.store.exception.ApiException; import com.cool.store.http.UserSourceResponse; +import com.cool.store.mapper.HyPartnerLabelGroupMapper; +import com.cool.store.mapper.HyPartnerLabelMapper; import com.cool.store.mapper.HyPartnerUserChannelMapper; import com.cool.store.request.CustomerInfoRequest; +import com.cool.store.request.GetTagRequest; import com.cool.store.sdk.ec.EcClient; import com.cool.store.sdk.ec.bo.ChangeFollowUserBo; import com.cool.store.sdk.ec.bo.UpdateCustomerBo; @@ -25,6 +29,8 @@ import com.cool.store.sdk.ec.request.UpdateCustomerRequest; import com.cool.store.sdk.ec.response.ChangeFollowUserResponse; import com.cool.store.sdk.ec.response.UpdateCustomerResponse; import com.cool.store.service.EcSyncService; +import com.cool.store.service.LabelGroupService; +import com.cool.store.service.LabelService; import com.cool.store.utils.Post; import com.cool.store.utils.StringUtil; import com.cool.store.utils.UUIDUtils; @@ -33,9 +39,11 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.io.IOException; +import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; @@ -45,10 +53,10 @@ import java.util.List; public class EcSyncServiceImpl implements EcSyncService { - @Value("${ec.baseUrl:null}") private String baseUrl; + @Resource private HyPartnerLineInfoDAO hyPartnerLineInfoDAO; @@ -65,6 +73,12 @@ public class EcSyncServiceImpl implements EcSyncService { @Resource private HyPartnerUserChannelMapper hyPartnerUserChannelMapper; + @Resource + private LabelGroupService labelGroupService; + + @Resource + private LabelService labelService; + @Override public boolean ecToApplet(List queryListData) { @@ -73,7 +87,7 @@ public class EcSyncServiceImpl implements EcSyncService { insertSelectiveSync(customerInfoItem); } catch (Exception e) { e.printStackTrace(); - sendFeiShuRobotMessage("推送:"+JSONObject.toJSONString(e),"27243d49-97ca-4981-8aec-7c3bf84eb660"); + sendFeiShuRobotMessage("推送:" + JSONObject.toJSONString(e), "27243d49-97ca-4981-8aec-7c3bf84eb660"); } } return false; @@ -81,7 +95,7 @@ public class EcSyncServiceImpl implements EcSyncService { @Override public void getChannelSource() { - String s = HttpUtil.get(baseUrl+"/ec/getChannelSource"); + String s = HttpUtil.get(baseUrl + "/ec/getChannelSource"); UserSourceResponse userSourceResponse = JSONObject.parseObject(s, UserSourceResponse.class); for (UserSourceResponse.ChannelSource channelSource : userSourceResponse.getData()) { Long id = channelSource.getId(); @@ -92,13 +106,35 @@ public class EcSyncServiceImpl implements EcSyncService { if (ObjectUtil.isNotNull(selectByChannel)) { hyPartnerUserChannel.setUpdateTime(new Date()).setId(selectByChannel.getId()); hyPartnerUserChannelMapper.updateByPrimaryKeySelective(hyPartnerUserChannel); - }else { + } else { hyPartnerUserChannel.setCreateTime(new Date()); hyPartnerUserChannelMapper.insertSelective(hyPartnerUserChannel); } } } + @Override + public Boolean labelInfo(List getTagRequestList) { + for (GetTagRequest getTagRequest : getTagRequestList) { + Long groupId = getTagRequest.getGroupId(); + if (ObjectUtil.isNotNull(labelGroupService.selectByPrimaryKey(groupId))) { + continue; + } + HyPartnerLabelGroupDO hyPartnerLabelGroupDO = new HyPartnerLabelGroupDO(); + hyPartnerLabelGroupDO.setLabelGroupName(getTagRequest.getGroupName()).setId(groupId); + labelGroupService.addEcLabelGroup(hyPartnerLabelGroupDO); + for (GetTagRequest.GetTagItem item : getTagRequest.getList()) { + if (ObjectUtil.isNotNull(labelService.selectByPrimaryKey(item.getClassId()))) { + continue; + } + HyPartnerLabelDO hyPartnerLabelDO = new HyPartnerLabelDO(); + hyPartnerLabelDO.setLabelName(item.getClassName()).setId(item.getClassId()).setLabelGroupId(groupId); + labelService.addEcLabel(hyPartnerLabelDO); + } + } + return Boolean.TRUE; + } + /** * 同步ec数据到表中 同时将部分数据同步到ec * @@ -112,13 +148,13 @@ public class EcSyncServiceImpl implements EcSyncService { //获取客户来源id String channel = customerInfoItem.getChannel(); HyPartnerUserChannelDO hyPartnerUserChannelDO = hyPartnerUserChannelMapper.selectByChannelName(channel); - Long channelId =null; + Long channelId = null; if (StringUtil.isNotEmpty(channel)) { - if (ObjectUtil.isNull(hyPartnerUserChannelDO)||ObjectUtil.isNull(hyPartnerUserChannelDO.getChannelId())) { + if (ObjectUtil.isNull(hyPartnerUserChannelDO) || ObjectUtil.isNull(hyPartnerUserChannelDO.getChannelId())) { getChannelSource(); } HyPartnerUserChannelDO channelDO = hyPartnerUserChannelMapper.selectByChannelName(channel); - channelId=channelDO.getChannelId(); + channelId = channelDO.getChannelId(); } String newPartnerId = UUIDUtils.get32UUID(); HyPartnerUserInfoDO resultUser = new HyPartnerUserInfoDO(); @@ -128,11 +164,11 @@ public class EcSyncServiceImpl implements EcSyncService { String followUserName = customerInfoItem.getFollowUserName(); String followUserMobile = customerInfoItem.getFollowUserMobile(); //传递过来有跟进人的情况下查询跟进人是否存在 - if (StringUtil.isNotEmpty(followUserMobile)&&StringUtil.isNotEmpty(followUserName)) { + if (StringUtil.isNotEmpty(followUserMobile) && StringUtil.isNotEmpty(followUserName)) { String userId = enterpriseUserDAO.selectByMobile(followUserMobile); if (StringUtil.isEmpty(userId)) { // 给飞书群发送消息 跟进人找不到 - sendFeiShuRobotMessage("推送:飞书架构中找不到该用户:【" + followUserName + "】,该用户电话号码为:" + followUserMobile,"27243d49-97ca-4981-8aec-7c3bf84eb660"); + sendFeiShuRobotMessage("推送:飞书架构中找不到该用户:【" + followUserName + "】,该用户电话号码为:" + followUserMobile, "27243d49-97ca-4981-8aec-7c3bf84eb660"); throw new ApiException("飞书架构中找不到该用户:【" + followUserName + "】,该用户电话号码为:" + followUserMobile); } resultLine.setInvestmentManager(userId); @@ -144,7 +180,7 @@ public class EcSyncServiceImpl implements EcSyncService { resultBase.setUsername(customerInfoItem.getName()).setMobile(customerInfoItem.getMobile()); HyPartnerUserInfoDO newUserInfo = hyPartnerUserInfoDAO.selectByMobile(resultUser.getMobile()); - EcClient ecClient=new EcClient(); + EcClient ecClient = new EcClient(); //有就更新ec没有就插入 if (newUserInfo != null) { //招商客户姓名为空 @@ -154,11 +190,11 @@ public class EcSyncServiceImpl implements EcSyncService { } // EC与沪姨合伙人同时存在的线索用户,但用户姓名不同,将沪姨合伙人线索姓名同步至EC覆盖原EC线索姓名 if (!newUserInfo.getUsername().equals(resultUser.getUsername())) { - UpdateCustomerRequest updateUserRequest=new UpdateCustomerRequest(); + UpdateCustomerRequest updateUserRequest = new UpdateCustomerRequest(); UpdateCustomerBo updateCustomerBo = new UpdateCustomerBo(); updateCustomerBo.setUsername(newUserInfo.getUsername()).setMobile(newUserInfo.getMobile()).setCrmId(customerInfoItem.getCrmId()); updateUserRequest.setParameter(updateCustomerBo); - UpdateCustomerResponse updateUserExec = ecClient.exec(baseUrl,updateUserRequest); + UpdateCustomerResponse updateUserExec = ecClient.exec(baseUrl, updateUserRequest); } String oldPartnerId = newUserInfo.getPartnerId(); //线索表 @@ -169,30 +205,33 @@ public class EcSyncServiceImpl implements EcSyncService { if (StringUtil.isNotEmpty(resultLine.getInvestmentManager())) { resultLine.setId(partnerLine.getId()).setUpdateTime(new Date()); //沪姨合伙人线索存在黑名单,EC该线索分配跟进人同步到沪姨合伙人但线索状态不变,还存在黑名单中 - resultLine.setLineStatus(partnerLine.getLineStatus().intValue()==LineStatusEnum.BLACKLIST.getCode().intValue() - ?LineStatusEnum.BLACKLIST.getCode():resultLine.getLineStatus()); + resultLine.setLineStatus(partnerLine.getLineStatus().intValue() == LineStatusEnum.BLACKLIST.getCode().intValue() + ? LineStatusEnum.BLACKLIST.getCode() : resultLine.getLineStatus()); hyPartnerLineInfoDAO.updateByPrimaryKeySelective(resultLine); } - }else { - EnterpriseUserDO enterpriseUser = enterpriseUserDAO.getUserInfoById(partnerLine.getInvestmentManager()); - enterpriseUser.setMobile(getNoWith86Number(enterpriseUser.getMobile())); - //电话相同但是名字不同 - if (enterpriseUser.getMobile().equals(followUserMobile) && !enterpriseUser.getName().equals(followUserName)) { - ChangeFollowUserRequest changeFollowUserRequest = new ChangeFollowUserRequest(); - ChangeFollowUserBo changeFollowUserBo = new ChangeFollowUserBo(); - changeFollowUserBo.setFollowUserId(customerInfoItem.getLastFollowUserId()).setCrmId(customerInfoItem.getCrmId()) - .setType(1).setUsername(enterpriseUser.getName()).setMobile(enterpriseUser.getMobile()); - changeFollowUserRequest.setParameter(changeFollowUserBo); - ChangeFollowUserResponse changeFollowUserExec = ecClient.exec(baseUrl,changeFollowUserRequest); - } - //电话不同 - if (!enterpriseUser.getMobile().equals(followUserMobile)) { - ChangeFollowUserRequest changeFollowUserRequest = new ChangeFollowUserRequest(); - ChangeFollowUserBo changeFollowUserBo = new ChangeFollowUserBo(); - changeFollowUserBo.setFollowUserId(customerInfoItem.getLastFollowUserId()).setCrmId(customerInfoItem.getCrmId()) - .setType(2).setUsername(enterpriseUser.getName()).setMobile(enterpriseUser.getMobile()); - changeFollowUserRequest.setParameter(changeFollowUserBo); - ChangeFollowUserResponse changeFollowUserExec = ecClient.exec(baseUrl,changeFollowUserRequest); + } else { + if (!getFollowLineStatus(partnerLine)) { + //私海 + EnterpriseUserDO enterpriseUser = enterpriseUserDAO.getUserInfoById(partnerLine.getInvestmentManager()); + enterpriseUser.setMobile(getNoWith86Number(enterpriseUser.getMobile())); + //电话相同但是名字不同 + if (enterpriseUser.getMobile().equals(followUserMobile) && !enterpriseUser.getName().equals(followUserName)) { + ChangeFollowUserRequest changeFollowUserRequest = new ChangeFollowUserRequest(); + ChangeFollowUserBo changeFollowUserBo = new ChangeFollowUserBo(); + changeFollowUserBo.setFollowUserId(customerInfoItem.getLastFollowUserId()).setCrmId(customerInfoItem.getCrmId()) + .setType(1).setUsername(enterpriseUser.getName()).setMobile(enterpriseUser.getMobile()); + changeFollowUserRequest.setParameter(changeFollowUserBo); + ChangeFollowUserResponse changeFollowUserExec = ecClient.exec(baseUrl, changeFollowUserRequest); + } + //电话不同 + if (!enterpriseUser.getMobile().equals(followUserMobile)) { + ChangeFollowUserRequest changeFollowUserRequest = new ChangeFollowUserRequest(); + ChangeFollowUserBo changeFollowUserBo = new ChangeFollowUserBo(); + changeFollowUserBo.setFollowUserId(customerInfoItem.getLastFollowUserId()).setCrmId(customerInfoItem.getCrmId()) + .setType(2).setUsername(enterpriseUser.getName()).setMobile(enterpriseUser.getMobile()); + changeFollowUserRequest.setParameter(changeFollowUserBo); + ChangeFollowUserResponse changeFollowUserExec = ecClient.exec(baseUrl, changeFollowUserRequest); + } } } //base表 @@ -223,10 +262,23 @@ public class EcSyncServiceImpl implements EcSyncService { } } - public static void main(String[] args) { - Integer a=null; - System.out.println(a.equals("bb")); + /** + *招商公海内跟进次数大于等于1的用户EC同步该用户进去公海,假若跟进次数为0的同步到EC跟进人就是唐佑玉 + * @param partnerLine + * @return true为公海 false:私海 + */ + public Boolean getFollowLineStatus(HyPartnerLineInfoDO partnerLine){ + if(partnerLine.getLineStatus()!=0){ + return Boolean.FALSE; + } + ArrayList list = new ArrayList<>(); + list.add(partnerLine.getPartnerId()); + List followCountList = hyPartnerLineInfoDAO.getFollowCountList(list); + if (!CollectionUtils.isEmpty(followCountList)) { + return followCountList.get(0).getFollowCount()>0; + } + return Boolean.FALSE; } /** diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LabelGroupServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LabelGroupServiceImpl.java index e220b230d..ebb8cef06 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LabelGroupServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LabelGroupServiceImpl.java @@ -14,6 +14,7 @@ import com.cool.store.mapper.HyPartnerLabelMapper; import com.cool.store.service.LabelGroupService; import com.cool.store.vo.LabelGroupListVo; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -33,6 +34,10 @@ public class LabelGroupServiceImpl implements LabelGroupService { @Autowired private HyPartnerLabelMapper labelMapper; + + @Value("${ec.sync.createUserId:null}") + private String createUserId; + /** * 查询标签组信息列表 * @param dto 查询条件 @@ -110,6 +115,18 @@ public class LabelGroupServiceImpl implements LabelGroupService { return labelGroupMapper.getLabelGroupList(labelGroupDO); } + @Override + public HyPartnerLabelGroupDO selectByPrimaryKey(Long id){ + return labelGroupMapper.selectByPrimaryKey(id); + } + + @Override + public void addEcLabelGroup(HyPartnerLabelGroupDO hyPartnerLabelGroupDO) { + hyPartnerLabelGroupDO.setCreateTime(new Date()).setCreateUserId(createUserId).setEditDate(new Date()) + .setEditUserId(createUserId); + labelGroupMapper.insertSelective(hyPartnerLabelGroupDO); + } + /** * 某个标签组内是否有未删除的标签 * @param id 标签组 id diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LabelServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LabelServiceImpl.java index 09075ca25..dcdf395b8 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LabelServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LabelServiceImpl.java @@ -15,6 +15,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -32,6 +33,11 @@ public class LabelServiceImpl implements LabelService { @Autowired private HyPartnerLabelMapper labelMapper; + + + @Value("${ec.sync.createUserId:null}") + private String createUserId; + /** * 获取数组列表 * @@ -98,6 +104,18 @@ public class LabelServiceImpl implements LabelService { labelMapper.updateByPrimaryKeySelective(labelDO); } + @Override + public HyPartnerLabelDO selectByPrimaryKey(Long classId) { + return labelMapper.selectByPrimaryKey(classId); + } + + @Override + public void addEcLabel(HyPartnerLabelDO hyPartnerLabelDO) { + hyPartnerLabelDO.setEditDate(new Date()).setCreateTime(new Date()).setEditUserId(createUserId).setCreateUserId(createUserId) + .setUpdateUserId(createUserId); + labelMapper.insertSelective(hyPartnerLabelDO); + } + private Boolean whetherLabelRepeat(HyPartnerLabelDO label) throws ApiException { Long id = label.getId(); label.setId(null); diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LineHighSeasServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LineHighSeasServiceImpl.java index 3de180c12..f70a855b9 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LineHighSeasServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LineHighSeasServiceImpl.java @@ -36,6 +36,7 @@ import java.util.List; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; +import java.util.stream.Collectors; @Service public class LineHighSeasServiceImpl implements LineHighSeasService { @@ -145,6 +146,10 @@ public class LineHighSeasServiceImpl implements LineHighSeasService { String fileStr = ossServer.uploadFileServer(stream, dir + getExcelName()); return new ResponseResult(500, "共上传" + lineDOList.size() + "条线索,其中" + styleCells.size() + "条存在异常", new ErrorExcelResponse(lineDOList.size(), styleCells.size(), fileStr)); } + //获取重复手机号集合 + List uniqueList = lineDOList.stream().filter(item->StringUtil.isNotEmpty(item.getMobile())).collect(Collectors.groupingBy(HyPartnerLineDO::getMobile, Collectors.counting())) + .entrySet().stream().filter(e -> e.getValue() > 1) + .map(Map.Entry::getKey).collect(Collectors.toList()); for (int i = 0; i < lineDOList.size(); i++) { HyPartnerLineDO hyPartnerLineDO = lineDOList.get(i); String partnerName = hyPartnerLineDO.getPartnerName(); @@ -174,6 +179,11 @@ public class LineHighSeasServiceImpl implements LineHighSeasService { hyPartnerLineDO.setErrorInfo(StringUtil.isEmpty(hyPartnerLineDO.getErrorInfo()) ? ExcelErrorConstants.MOBILE_EXIST : hyPartnerLineDO.getErrorInfo().concat(Constants.SEMICOLON).concat(ExcelErrorConstants.MOBILE_EXIST)); ExcelUtil.setStyleMap(styleCells, i, 1, new String[]{ExcelUtil.FONT_RED}); } + //手机号重复 + if (uniqueList.contains(mobile)) { + hyPartnerLineDO.setErrorInfo(StringUtil.isEmpty(hyPartnerLineDO.getErrorInfo()) ? ExcelErrorConstants.MOBILE_REPEAT : hyPartnerLineDO.getErrorInfo().concat(Constants.SEMICOLON).concat(ExcelErrorConstants.MOBILE_REPEAT)); + ExcelUtil.setStyleMap(styleCells, i, 1, new String[]{ExcelUtil.FONT_RED}); + } } //常驻区域为空 String liveArea = hyPartnerLineDO.getLiveAreaReplace().trim(); diff --git a/coolstore-partner-service/src/main/java/com/cool/store/utils/MybatisBatchUtils.java b/coolstore-partner-service/src/main/java/com/cool/store/utils/MybatisBatchUtils.java new file mode 100644 index 000000000..90dba4d4c --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/utils/MybatisBatchUtils.java @@ -0,0 +1,56 @@ +package com.cool.store.utils; + +import org.apache.ibatis.session.ExecutorType; +import org.apache.ibatis.session.SqlSession; +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.List; +import java.util.function.BiConsumer; + +@Component +@ConditionalOnClass({SqlSessionFactory.class, SqlSessionFactoryBean.class}) +public class MybatisBatchUtils { + + /** + * 每次处理500条 + */ + private static final int BATCH_SIZE = 500; + + @Resource + private SqlSessionFactory sqlSessionFactory; + + /** + * 批量处理修改或者插入 + * + * @param data 需要被处理的数据 + * @param mapperClass Mybatis的Mapper类 + * @param consumer 自定义处理逻辑 + * @return int 影响的总行数 + * @author renwd + */ + public int batchInsertOrUpdate(List data, Class mapperClass, BiConsumer consumer) { + int i = 1; + SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH); + try { + U mapper = sqlSession.getMapper(mapperClass); + int size = data.size(); + for (T element : data) { + consumer.accept(element, mapper); + if ((i % BATCH_SIZE == 0) || i == size) { + sqlSession.flushStatements(); + } + i++; + } + sqlSession.commit(); + } catch (Exception e) { + throw new RuntimeException(e); + } finally { + sqlSession.close(); + } + return i - 1; + } +} diff --git a/coolstore-partner-webb/src/main/java/com/cool/store/config/TokenValidateFilter.java b/coolstore-partner-webb/src/main/java/com/cool/store/config/TokenValidateFilter.java index 431e1feb6..4ddcbc071 100644 --- a/coolstore-partner-webb/src/main/java/com/cool/store/config/TokenValidateFilter.java +++ b/coolstore-partner-webb/src/main/java/com/cool/store/config/TokenValidateFilter.java @@ -51,6 +51,7 @@ public class TokenValidateFilter implements Filter { //TODO 800回调地址暂时不做验证 "/partner/pc/flow/qualificationReview/callback", "/**/ecSync/ecToApplet/**", + "/**/ecSync/labelInfo/**", "/partner/pc/websocket/**", "/partner/pc/call/**"); diff --git a/coolstore-partner-webb/src/main/java/com/cool/store/controller/EcSyncController.java b/coolstore-partner-webb/src/main/java/com/cool/store/controller/EcSyncController.java index 4cebd591d..78978078d 100644 --- a/coolstore-partner-webb/src/main/java/com/cool/store/controller/EcSyncController.java +++ b/coolstore-partner-webb/src/main/java/com/cool/store/controller/EcSyncController.java @@ -2,6 +2,7 @@ package com.cool.store.controller; import com.cool.store.request.CustomerInfoRequest; +import com.cool.store.request.GetTagRequest; import com.cool.store.response.ResponseResult; import com.cool.store.service.EcSyncService; import com.cool.store.vo.InterviewScheduleInfoVO; @@ -28,4 +29,10 @@ public class EcSyncController { return ResponseResult.success(ecSyncService.ecToApplet(queryListData)); } + @PostMapping(path = "/labelInfo") + @ApiOperation("ec同步标签数据到小程序") + public ResponseResult labelInfo(@RequestBody List getTagRequestList){ + return ResponseResult.success(ecSyncService.labelInfo(getTagRequestList)); + } + }