diff --git a/src/main/java/com/kiisoo/ic/customer/controller/CustomerViewController.java b/src/main/java/com/kiisoo/ic/customer/controller/CustomerViewController.java index 463521c..4bf70f2 100644 --- a/src/main/java/com/kiisoo/ic/customer/controller/CustomerViewController.java +++ b/src/main/java/com/kiisoo/ic/customer/controller/CustomerViewController.java @@ -133,6 +133,19 @@ public class CustomerViewController extends BaseController { } } + /** + * 同步会员数据 + * @return + */ + @RequestMapping(value = "/sync/vip", method = RequestMethod.GET) + public void syncVip(){ + try{ + customerViewService.syncVip(); + }catch (Exception e){ + log.error("批量同步总数出错", e); + } + } + /** * 找到所有推广为0店铺 * @param userId 用户id diff --git a/src/main/java/com/kiisoo/ic/customer/service/CustomerViewService.java b/src/main/java/com/kiisoo/ic/customer/service/CustomerViewService.java index 010c4aa..28efd2a 100644 --- a/src/main/java/com/kiisoo/ic/customer/service/CustomerViewService.java +++ b/src/main/java/com/kiisoo/ic/customer/service/CustomerViewService.java @@ -1,9 +1,13 @@ package com.kiisoo.ic.customer.service; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.github.pagehelper.Page; import com.github.pagehelper.PageHelper; +import com.kiisoo.ic.common.utils.MD5FileUtil; +import com.kiisoo.ic.common.utils.httpClientUtil.HttpClientUtil; import com.kiisoo.ic.config.WxCpConfiguration; +import com.kiisoo.ic.constants.Constants; import com.kiisoo.ic.customer.entity.*; import com.kiisoo.ic.customer.mapper.OpCustomerDOMapper; import com.kiisoo.ic.customer.mapper.OpVipDOMapper; @@ -16,6 +20,9 @@ import com.kiisoo.ic.generalize.entity.PrivilageOrganizational; import com.kiisoo.ic.generalize.mapper.PoiCustomerContactDataStatMapper; import com.kiisoo.ic.generalize.mapper.RetailCompanyMapper; import com.kiisoo.ic.generalize.service.RetailCompanyService; +import com.kiisoo.ic.store.bean.BsdShareCodeResponse; +import com.kiisoo.ic.store.bean.BsdVipResponse; +import com.kiisoo.ic.store.bean.MemberDtlDTO; import com.kiisoo.ic.store.entity.PoiStore; import com.kiisoo.ic.store.entity.PoiStoreStaff; import com.kiisoo.ic.store.entity.PrivilageCpUserStoreDO; @@ -31,6 +38,7 @@ import me.chanjar.weixin.cp.bean.WxCpUserExternalContactInfo; import org.apache.commons.collections.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 java.text.SimpleDateFormat; @@ -115,6 +123,10 @@ public class CustomerViewService { @Autowired private RetailCompanyMapper retailCompanyMapper; + + @Value("${bsd.vip}") + private String vipBsdUrl; + /** * 客户概览main——趋势图 * @param userId 用户id @@ -699,4 +711,95 @@ public class CustomerViewService { countDownLatch.await(); } } + + /** + * 同步会员数据 + * @return + */ + public void syncVip() throws InterruptedException { + //初始化线程 + ExecutorService newFixedThreadPool = Executors.newFixedThreadPool(8); + + //查询现有企业微信账号 + List customers = opCustomerDOMapper.selectList(null); + + if (CollectionUtils.isNotEmpty(customers)){ + //分组 + final List> afterPageList = com.kiisoo.ic.utils.CollectionUtils.portListByQuantity(customers, 100); + //定义线程池长度 + int threadPoolSize = afterPageList.size(); + //定义countDownLatch + final CountDownLatch countDownLatch = new CountDownLatch(threadPoolSize); + for (int i = 0; i < afterPageList.size(); i++) { + List opCustomers = afterPageList.get(i); + newFixedThreadPool.execute(new Runnable() { + @Override + public void run() { + try { + //查询企业微信已配置联系我的用户 + for (OpCustomer customer : opCustomers) { + String wechatUniId = customer.getWechatUniId(); + if (StringUtils.isBlank(wechatUniId)){ + continue; + } + String url = ""; + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Map params = new HashMap<>(); + params.put("unionId", wechatUniId); + String message = HttpClientUtil.httpPost(vipBsdUrl + MD5FileUtil.getMD5String("BOSIDENG" + sdf.format(new Date())), JSONObject.toJSONString(params)).getMessage(); + if (StringUtils.isBlank(message)){ + continue; + } + JSONObject vipJson = JSONObject.parseObject(message); + BsdVipResponse bsdResponse = vipJson.toJavaObject(BsdVipResponse.class); + if (bsdResponse.getSuccess() && bsdResponse.getData() != null){ + MemberDtlDTO data = bsdResponse.getData(); + + OpCustomer opCustomer = new OpCustomer(data.getMemberName(), data.getMobileNo()); + opCustomer.setUpdateBy(Constants.SYS_OPERATION); + + // 根据手机号码去重 + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("phone", data.getMobileNo()); + OpVip opVip = opVipDOMapper.selectOne(wrapper); + OpVip opVip1 = new OpVip(); + opVip1.setStatus(1L); + opVip1.setLevel(data.getMemberLevel().toString()); + opVip1.setPhone(data.getMobileNo()); + opVip1.setName(data.getMemberName()); + opVip1.setBirthday(data.getBirthday()); + opVip1.setRegisterTime(data.getCreateDate()); + if (opVip == null) { + //数据库没有这个数据--新建数据 + opVip1.setCreateBy(Constants.SYS_OPERATION); + opVip1.setCreateTime(new Date()); + opVipDOMapper.insert(opVip1); + //有vip信息就绑定信息 + opCustomer.setMemberId(opVip1.getId()); + } else { + opVip1.setId(opVip.getId()); + opVip1.setUpdateTime(new Date()); + opVip1.setUpdateBy(Constants.SYS_OPERATION); + opVipDOMapper.updateById(opVip1); + //有vip信息就绑定信息 + opCustomer.setMemberId(opVip.getId()); + } + QueryWrapper wrapper1 = new QueryWrapper<>(); + wrapper1.eq("wechat_uni_id", wechatUniId); + opCustomerDOMapper.update(opCustomer, wrapper1); + } + + } + } catch (Exception e) { + log.error("同步会员数据", e); + } finally { + //每次减去一,避免死锁 + countDownLatch.countDown(); + } + } + }); + } + countDownLatch.await(); + } + } } diff --git a/src/main/java/com/kiisoo/ic/store/bean/BsdVipResponse.java b/src/main/java/com/kiisoo/ic/store/bean/BsdVipResponse.java new file mode 100644 index 0000000..51434db --- /dev/null +++ b/src/main/java/com/kiisoo/ic/store/bean/BsdVipResponse.java @@ -0,0 +1,12 @@ +package com.kiisoo.ic.store.bean; + +import lombok.Data; + +@Data +public class BsdVipResponse { + private Boolean success; + private String resultCode; + private String errorMessage; + private MemberDtlDTO data; + +} diff --git a/src/main/java/com/kiisoo/ic/store/bean/MemberDtlDTO.java b/src/main/java/com/kiisoo/ic/store/bean/MemberDtlDTO.java new file mode 100644 index 0000000..941af92 --- /dev/null +++ b/src/main/java/com/kiisoo/ic/store/bean/MemberDtlDTO.java @@ -0,0 +1,122 @@ +package com.kiisoo.ic.store.bean; + +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; +@Data +public class MemberDtlDTO { + /** + * 会员主键 + */ + private Long memberId; + /** + * 会员编号 + */ + private String userNo; + /** + * 会员手机号码 + */ + private String mobileNo; + /** + * 会员姓名 + */ + private String memberName; + /** + * 会员状态:-1-作废 0-未激活 1-正常 2-锁定 + */ + private Byte memberStatus; + /** + * 会员性别(FEMALE MALE) + */ + private String gender; + /** + * 店铺编号 + */ + private String storeNo; + /** + * 会员卡号 + */ + private String cardNo; + /** + * 会员等级(1-普通卡会员 2-贵宾卡会员 3-金卡会员 4-钻石卡会员 5-至尊卡会员) + */ + private Long memberLevel; + /** + * 会员生日 + */ + private Date birthday; + /** + * 会员地址 + */ + private String address; + /** + * 教育程度 + */ + private Long educationLevel; + /** + * 月收入 + */ + private Long monthlyIncome; + /** + * 所在行业 + */ + private Long industry; + /** + * 最近一次消费日期 + */ + private Date lastBuyDate; + /** + * 累计消费次数 + */ + private Integer totalTimes; + /** + * 累计下单数量 + */ + private Integer totalNum; + /** + * 累计下单金额 + */ + private BigDecimal totalAmount; + /** + * 累计积分 + */ + private Integer totalPoint; + /** + * 积分调整 + */ + private Integer adjustPoint; + /** + * 已用积分 + */ + private Integer usedPoint; + /** + * 可用积分 + */ + private Integer canusePoint; + /** + * 最后一次下单日期 + */ + private Date lastDate; + /** + * 最后一次下单数量 + */ + private Integer lastNum; + /** + * 最后一次下单金额 + */ + private BigDecimal lastAmount; + /** + * 会员备注 + */ + private String remark; + /** + * 可用优惠券数量 + */ + private Integer couponsCount; + /** + * 创建时间 + */ + private Date createDate; + +} diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index dd96d21..00f4c65 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -24,7 +24,7 @@ server: bsd: - vip: http://vtest.bsd.cn/BSD_WXAPP/miniProgram/getMemberDtlByUnionId + vip: http://vtest.bsd.cn/BSD_WXAPP/miniProgram/getMemberDtlByUnionId?token= qrCode: http://vtest.bsd.cn/BSD_WXAPP/qyWechat/getShareQRcode?token= userBehavior: http://vtest.bsd.cn/BSD_WXAPP/qyWechat/getUserBehaviorData?token= cancelQrCode: http://vtest.bsd.cn/BSD_WXAPP/qyWechat/cancelShareQRcode?token= diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml index 0cac706..00168fe 100644 --- a/src/main/resources/application-prod.yml +++ b/src/main/resources/application-prod.yml @@ -23,7 +23,7 @@ server: bsd: - vip: http://10.101.10.24:80/BSD_WXAPP/miniProgram/getMemberDtlByUnionId + vip: http://10.101.10.24:80/BSD_WXAPP/miniProgram/getMemberDtlByUnionId?token= qrCode: http://10.101.10.24:80/BSD_WXAPP/qyWechat/getShareQRcode?token= userBehavior: http://10.101.10.24:80/BSD_WXAPP/qyWechat/getUserBehaviorData?token= cancelQrCode: http://10.101.10.24:80/BSD_WXAPP/qyWechat/cancelShareQRcode?token= \ No newline at end of file