server/service/src/main/java/com/doumee/biz/zbom/ZbomCRMService.java
@@ -3,6 +3,7 @@ import com.doumee.biz.zbom.model.CrmCustomerSubmmitModel; import com.doumee.biz.zbom.model.IamUpateShopModel; import com.doumee.biz.zbom.model.IamUpateUserModel; import com.doumee.dao.business.model.CustomerLog; import org.springframework.stereotype.Service; import java.util.List; @@ -15,5 +16,7 @@ @Service public interface ZbomCRMService { void dealCustomerLogData(CustomerLog customerLog); int postDataToCrm(CrmCustomerSubmmitModel entity ); } server/service/src/main/java/com/doumee/biz/zbom/impl/ZbomCRMServiceImpl.java
@@ -6,6 +6,7 @@ import com.doumee.biz.zbom.model.CrmCustomerInfoModel; import com.doumee.biz.zbom.model.CrmCustomerSubmmitModel; import com.doumee.core.utils.Constants; import com.doumee.core.utils.DateUtil; import com.doumee.core.utils.HttpsUtil; import com.doumee.dao.business.CrmInterfaceLogMapper; import com.doumee.dao.business.CustomerLogMapper; @@ -15,6 +16,7 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import java.util.*; @@ -34,6 +36,30 @@ @Autowired private RedisTemplate<String, Object> redisTemplate; @Override @Async public void dealCustomerLogData(CustomerLog customerLog){ CrmCustomerSubmmitModel entity = new CrmCustomerSubmmitModel(); List<CrmCustomerInfoModel> cusInfo = new ArrayList(); CrmCustomerInfoModel crmCustomerInfoModel = new CrmCustomerInfoModel(); crmCustomerInfoModel.setId(customerLog.getId()); crmCustomerInfoModel.setName(customerLog.getName()); crmCustomerInfoModel.setPhone(customerLog.getPhone()); crmCustomerInfoModel.setAreaname(customerLog.getAreaName()); crmCustomerInfoModel.setAreacode(customerLog.getAreaCode()); crmCustomerInfoModel.setOpenid(customerLog.getOpenid()); crmCustomerInfoModel.setSource(Constants.CrmSources.SOURCE_ZBJX); crmCustomerInfoModel.setChannel(crmCustomerInfoModel.getSource()+"00"); crmCustomerInfoModel.setDate(DateUtil.dateToString(customerLog.getCreateDate(),"yyyy/MM/dd HH:mm")); cusInfo.add(crmCustomerInfoModel); entity.setCusInfo(cusInfo); this.postDataToCrm(entity); } /** * 志邦客户信息提交接口 @@ -98,6 +124,7 @@ .set(CustomerLog::getCrmDate,new Date() ));// 更新状态 return status;// 默认失败 } public void saveInterfaceLog(String url,String name,String param,Integer success,String respone){ if(crmInterfaceLogMapper ==null){ return; server/service/src/main/java/com/doumee/biz/zbom/impl/ZbomSMSServiceImpl.java
@@ -45,7 +45,7 @@ public static void main(String[] args) { ZbomSMSServiceImpl obj = new ZbomSMSServiceImpl(); obj.sendMessage("您的验证码是765412,此验证码用于重置密码。3分钟内有效。","15345690849"); obj.sendMessage("您的验证码是765412,此验证码用于重置密码。3分钟内有效。","18156091665"); } /** * 志邦客户信息提交接口 server/service/src/main/java/com/doumee/biz/zbom/impl/ZbomZhongTaiServiceImpl.java
@@ -109,6 +109,7 @@ } return null; } /** * 获取内容列表分页 * @param param server/service/src/main/java/com/doumee/core/utils/Constants.java
@@ -38,6 +38,9 @@ public static final String HK_ROOTORG_CODE ="HK_ROOTORG_CODE" ; public static final String HK_ROOTORG_NAME ="HK_ROOTORG_NAME" ; public static final String REDIS_TOKEN_KEY = "token_"; public static final String CUSTOMER = "CUSTOMER"; public static final String BUSINESS = "BUSINESS"; //被拜访人信息校验方式(0手机号单独校验 1手机号和姓名组合校验) public static final String BEVISITED_USER_VALID = "BEVISITED_USER_VALID"; @@ -53,6 +56,7 @@ public static final String FILE_DIR = ""; public static final String INITIAL_PASSWORD = "INITIAL_PASSWORD"; public static final String VALIDATE_VISIT = "VALIDATE_VISIT"; public static final String PLATFORM = "mp-weixin"; // 访客来访配置 public static final String VISIT_CONFIG = "VISIT_CONFIG"; @@ -449,6 +453,39 @@ int otherDeal = 4;//他人已处理 } /** * 根据配置处理房屋户型信息 * @param layout * @return */ public static String getHouseLayout(String layout){ if(StringUtils.isBlank(layout)){ return null; } String [] arr = layout.split("-"); StringBuffer stringBuffer = new StringBuffer(); for (int i = 0; i < arr.length; i++) { if(i==0){ stringBuffer.append( i + "室"); }else if(i==1){ stringBuffer.append( i + "厅"); }else if(i==2){ stringBuffer.append( i + "厨"); }else if(i==3){ stringBuffer.append( i + "卫"); }else if(i==4){ stringBuffer.append( i + "阳"); }else { break; } } return stringBuffer.toString(); } /** * 获取车牌类型信息 * server/service/src/main/java/com/doumee/dao/business/model/CustomerLog.java
@@ -1,5 +1,6 @@ package com.doumee.dao.business.model; import com.baomidou.mybatisplus.annotation.TableField; import com.doumee.core.annotation.excel.ExcelColumn; import com.doumee.dao.business.dto.BaseQueryDto; import io.swagger.annotations.ApiModel; @@ -150,4 +151,8 @@ @ExcelColumn(name="姓名") private String name; @ApiModelProperty(value = "openid") @TableField(exist = false) private String openid; } server/service/src/main/java/com/doumee/dao/web/reqeust/RenovationCalculatorDTO.java
@@ -31,6 +31,4 @@ @ApiModelProperty(value = "装修预算(万元)") private BigDecimal budget; } server/service/src/main/java/com/doumee/service/business/CustomerService.java
@@ -3,6 +3,7 @@ import com.doumee.core.model.PageData; import com.doumee.core.model.PageWrap; import com.doumee.dao.business.model.Customer; import com.doumee.dao.business.model.CustomerLog; import com.doumee.dao.web.reqeust.FreeCustomizationDTO; import com.doumee.dao.web.reqeust.RenovationCalculatorDTO; import com.doumee.dao.web.reqeust.TestTrimStyleDTO; @@ -103,17 +104,17 @@ * 房屋装修计算器信息存储 * @param renovationCalculatorDTO */ void saveRenovationCalculator(RenovationCalculatorDTO renovationCalculatorDTO); CustomerLog saveRenovationCalculator(RenovationCalculatorDTO renovationCalculatorDTO); /** * 0元定制信息 * @param freeCustomizationDTO */ void saveFreeCustomizationApply(FreeCustomizationDTO freeCustomizationDTO); CustomerLog saveFreeCustomizationApply(FreeCustomizationDTO freeCustomizationDTO); /** * 测试装修风格 * @param testTrimStyleDTO */ void saveTestTrimStyle(TestTrimStyleDTO testTrimStyleDTO); CustomerLog saveTestTrimStyle(TestTrimStyleDTO testTrimStyleDTO); } server/service/src/main/java/com/doumee/service/business/MemberService.java
@@ -123,4 +123,9 @@ Member getMemberInfo(Long memberId); /** * 用户注销 * @param memberId */ void logOff(Long memberId); } server/service/src/main/java/com/doumee/service/business/impl/CustomerServiceImpl.java
@@ -207,11 +207,8 @@ return customerMapper.selectCount(wrapper); } @Override public void saveRenovationCalculator(RenovationCalculatorDTO renovationCalculatorDTO){ public CustomerLog saveRenovationCalculator(RenovationCalculatorDTO renovationCalculatorDTO){ if(Objects.isNull(renovationCalculatorDTO) || Objects.isNull(renovationCalculatorDTO.getMemberId()) || Objects.isNull(renovationCalculatorDTO.getHouseStatus()) @@ -255,11 +252,13 @@ customerLog.setHouseType(renovationCalculatorDTO.getHouseType()); customerLog.setCostomerId(customer.getId().toString()); customerLogMapper.insert(customerLog); customerLog.setOpenid(member.getOpenid()); return customerLog; } @Override public void saveFreeCustomizationApply(FreeCustomizationDTO freeCustomizationDTO){ public CustomerLog saveFreeCustomizationApply(FreeCustomizationDTO freeCustomizationDTO){ if(Objects.isNull(freeCustomizationDTO) || Objects.isNull(freeCustomizationDTO.getMemberId()) || StringUtils.isEmpty(freeCustomizationDTO.getName()) @@ -320,10 +319,12 @@ customerLog.setName(freeCustomizationDTO.getName()); customerLog.setPhone(freeCustomizationDTO.getPhone()); customerLogMapper.insert(customerLog); customerLog.setOpenid(member.getOpenid()); return customerLog; } @Override public void saveTestTrimStyle(TestTrimStyleDTO testTrimStyleDTO){ public CustomerLog saveTestTrimStyle(TestTrimStyleDTO testTrimStyleDTO){ if(Objects.isNull(testTrimStyleDTO) || Objects.isNull(testTrimStyleDTO.getMemberId()) @@ -388,6 +389,8 @@ customerLog.setAgeInfo(testTrimStyleDTO.getAgeInfo()); customerLog.setPhone(testTrimStyleDTO.getPhone()); customerLogMapper.insert(customerLog); customerLog.setOpenid(member.getOpenid()); return customerLog; } server/service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -4,6 +4,11 @@ import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo; import com.alibaba.fastjson.JSONObject; import com.doumee.biz.system.SystemDictDataBiz; import com.doumee.biz.zbom.ZbomZhongTaiService; import com.doumee.biz.zbom.model.zhongtai.ZTBaseRequst; import com.doumee.biz.zbom.model.zhongtai.ZTUserGetTokenRequest; import com.doumee.biz.zbom.model.zhongtai.ZTUserInfoUpdateRequest; import com.doumee.biz.zbom.model.zhongtai.response.ZTUserGetTokenResponse; import com.doumee.config.Jwt.JwtPayLoad; import com.doumee.config.Jwt.JwtTokenUtil; import com.doumee.core.constants.ResponseStatus; @@ -54,6 +59,9 @@ @Autowired private SystemDictDataBiz systemDictDataBiz; @Autowired private ZbomZhongTaiService zbomZhongTaiService; @Autowired private RedisTemplate<String,Object> redisTemplate; @@ -301,6 +309,28 @@ @Override public void updMemberDetail(EditMemberRequest editMemberRequest){ Member member = memberMapper.selectById(editMemberRequest.getMemberId()); ZTUserInfoUpdateRequest ztUserInfoUpdateRequest = new ZTUserInfoUpdateRequest(); ztUserInfoUpdateRequest.setOpenid(member.getOpenid()); String appId = systemDictDataBiz.queryByCode(Constants.WX_MINI_CONFIG,Constants.WX_APPID_CUSTOMER).getCode(); ztUserInfoUpdateRequest.setAppId(appId); ztUserInfoUpdateRequest.setPlatform(Constants.PLATFORM); ztUserInfoUpdateRequest.setPhone(editMemberRequest.getPhone()); ztUserInfoUpdateRequest.setName(editMemberRequest.getName()); ztUserInfoUpdateRequest.setAddress(editMemberRequest.getProvinceName()+editMemberRequest.getCityName()+editMemberRequest.getAreaName()); ztUserInfoUpdateRequest.setFullAddress(editMemberRequest.getAddress()); String prefix = systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE, Constants.RESOURCE_PATH).getCode() + systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE, Constants.MEMBER).getCode(); if(StringUtils.isNotBlank(editMemberRequest.getImgurl())){ ztUserInfoUpdateRequest.setAvatarUrl(prefix + editMemberRequest.getImgurl()); } ztUserInfoUpdateRequest.setUptown(editMemberRequest.getDistrict()); ztUserInfoUpdateRequest.setHouseArea(editMemberRequest.getHousearea().toString()); ztUserInfoUpdateRequest.setHouseLayout(Constants.getHouseLayout(editMemberRequest.getHousetype())); ZTUserGetTokenResponse userUpdateInfo = zbomZhongTaiService.userUpdateInfo(ztUserInfoUpdateRequest); if(Objects.isNull(userUpdateInfo)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"中台信息更新失败,请联系管理员"); } memberMapper.update(new UpdateWrapper<Member>() .lambda() .set(StringUtils.isNotBlank(editMemberRequest.getImgurl()),Member::getImgurl,editMemberRequest.getImgurl()) @@ -318,8 +348,8 @@ .set(StringUtils.isNotBlank(editMemberRequest.getHousetype()),Member::getHousetype,editMemberRequest.getHousetype()) .set(Objects.nonNull(editMemberRequest.getLatitude()),Member::getLatitude,editMemberRequest.getLatitude()) .set(Objects.nonNull(editMemberRequest.getLongitude()),Member::getLongitude,editMemberRequest.getLongitude()) .set(Member::getToken,userUpdateInfo.getToken()) .eq(Member::getId,editMemberRequest.getMemberId())); } @Override @@ -334,4 +364,60 @@ return member; } /** * 更新中台token信息 * @param member */ public void updUserZTToken(Member member){ //如果无有效期/已过期 重新获取 if(Objects.isNull(member.getTokenDate()) || member.getTokenDate().getTime()<=System.currentTimeMillis() ){ ZTUserGetTokenRequest param = new ZTUserGetTokenRequest(); //查询APPID String appId = systemDictDataBiz.queryByCode(Constants.WX_MINI_CONFIG,Constants.WX_APPID_CUSTOMER).getCode(); param.setAppId(appId); param.setOpenId(member.getOpenid()); ZTUserGetTokenResponse ztUserGetTokenResponse = zbomZhongTaiService.getUserToken(param); if(Objects.nonNull(ztUserGetTokenResponse)){ member.setToken(ztUserGetTokenResponse.getToken()); //TODO 暂无过期日期 memberMapper.update(new UpdateWrapper<Member>().lambda().set(Member::getToken,ztUserGetTokenResponse.getToken()) .eq(Member::getId,member.getId())); }else{ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"中台TOKEN获取失败,请联系管理员"); } }; } @Override public void logOff(Long memberId){ Member member = memberMapper.selectById(memberId); if(Objects.isNull(member)){ throw new BusinessException(ResponseStatus.DATA_EMPTY); } if(StringUtils.isBlank(member.getPhone())){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"用户已注销"); } //校验用户token信息 this.updUserZTToken(member); //调起中台注销接口 ZTBaseRequst ztBaseRequst = new ZTBaseRequst(); ztBaseRequst.setUserType(Constants.CUSTOMER); ztBaseRequst.setOpenid(member.getOpenid()); ztBaseRequst.setToken(member.getToken()); Boolean logoutFlag = zbomZhongTaiService.userLogout(ztBaseRequst); if(logoutFlag){ memberMapper.update(new UpdateWrapper<Member>().lambda() .set(Member::getPhone,null) .set(Member::getEditDate,new Date()) .eq(Member::getId,member.getId()) ); return; } throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"中台注销失败,请联系管理员"); } } server/service/src/main/java/com/doumee/service/business/impl/SmsEmailServiceImpl.java
@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.doumee.biz.system.SystemDictDataBiz; import com.doumee.biz.zbom.ZbomSMSService; import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; import com.doumee.core.model.LoginUserInfo; @@ -39,6 +40,9 @@ @Autowired private SystemDictDataBiz systemDictDataBiz; @Autowired private ZbomSMSService zbomSMSService; public static void isCaptcheValide(SmsEmailMapper smsEmailMapper, String phone, String captche) { @@ -89,10 +93,8 @@ String code = Constants.getRandom6Num(); String content = //systemDictDataBiz.queryByCode(Constants.SMS,Constants.SMS_COMNAME).getCode()+ "验证码为:"+code+",此验证码有效为3分钟。请勿泄露"; zbomSMSService.sendMessage(content,smsEmail.getPhone()); smsEmail.setRemark(code); smsEmail.setIsdeleted(Constants.ZERO); smsEmail.setCreateDate(new Date()); server/service/src/main/java/com/doumee/service/business/impl/UsersServiceImpl.java
@@ -18,12 +18,9 @@ import com.doumee.dao.admin.request.UserImport; import com.doumee.dao.business.ShopMapper; import com.doumee.core.wx.WxMiniConfig; import com.doumee.dao.business.SmsEmailMapper; import com.doumee.dao.business.UsersMapper; import com.doumee.dao.business.model.Multifile; import com.doumee.dao.business.model.News; import com.doumee.dao.business.model.Shop; import com.doumee.dao.business.model.Member; import com.doumee.dao.business.model.Users; import com.doumee.dao.business.model.*; import com.doumee.dao.system.model.SystemUser; import com.doumee.dao.web.response.AccountResponse; import com.doumee.service.business.UsersService; @@ -68,6 +65,8 @@ private UsersMapper usersMapper; @Autowired private ShopMapper shopMapper; @Autowired private SmsEmailMapper smsEmailMapper; @Autowired private SystemDictDataBiz systemDictDataBiz; @@ -293,6 +292,8 @@ } @Override public AccountResponse phoneLogin(String phone,String code){ if(StringUtils.isEmpty(phone)||StringUtils.isEmpty(code)){ @@ -308,10 +309,27 @@ if(!StringUtils.equals(users.getStatus(),Constants.ZERO+"")){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"当前账户已停用,请联系管理员"); } //TODO 验证短信信息 if(!StringUtils.equals(code,"123456")){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"验证码错误"); //验证短信 SmsEmail model = smsEmailMapper.selectOne(new QueryWrapper<SmsEmail>().lambda() .eq(SmsEmail::getType, Constants.ZERO) .eq(SmsEmail::getPhone, phone) .eq(SmsEmail::getRemark, code) .eq(SmsEmail::getIsdeleted, Constants.ZERO) ); if(model == null){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,验证码不正确,请重新发送再试!"); } if(!Constants.equalsInteger(model.getStatus(),Constants.ZERO)){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,验证码已失效,请重新发送再试!"); } model.setStatus(Constants.ONE); model.setEditDate(new Date()); if(model.getCreateDate() !=null && System.currentTimeMillis() - model.getCreateDate().getTime() > 3*60*1000){ smsEmailMapper.updateById(model); throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,验证码已失效,请重新发送再试~"); } smsEmailMapper.updateById(model); //创建token JwtPayLoad payLoad = new JwtPayLoad(users.getId(),Constants.ONE); String token = JwtTokenUtil.generateToken(payLoad); server/web/src/main/java/com/doumee/api/web/CustomerApi.java
@@ -1,8 +1,10 @@ package com.doumee.api.web; import com.doumee.biz.zbom.ZbomCRMService; import com.doumee.config.annotation.LoginRequired; import com.doumee.core.annotation.trace.Trace; import com.doumee.core.model.ApiResponse; import com.doumee.dao.business.model.CustomerLog; import com.doumee.dao.business.model.Member; import com.doumee.dao.web.reqeust.*; import com.doumee.dao.web.response.AccountResponse; @@ -15,6 +17,7 @@ import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.checkerframework.checker.units.qual.A; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -43,6 +46,8 @@ @Autowired private CustomerService customerService; @Autowired private ZbomCRMService zbomCRMService; @ApiOperation(value = "客户端小程序登陆", notes = "客户端小程序") @GetMapping("/wxLoginCustomer") @@ -101,7 +106,8 @@ }) public ApiResponse saveRenovationCalculator(@RequestBody RenovationCalculatorDTO renovationCalculatorDTO) { renovationCalculatorDTO.setMemberId(getMemberId()); customerService.saveRenovationCalculator(renovationCalculatorDTO); CustomerLog customerLog =customerService.saveRenovationCalculator(renovationCalculatorDTO); zbomCRMService.dealCustomerLogData(customerLog); return ApiResponse.success("操作成功"); } @@ -114,7 +120,8 @@ }) public ApiResponse saveFreeCustomizationApply(@RequestBody FreeCustomizationDTO freeCustomizationDTO) { freeCustomizationDTO.setMemberId(getMemberId()); customerService.saveFreeCustomizationApply(freeCustomizationDTO); CustomerLog customerLog = customerService.saveFreeCustomizationApply(freeCustomizationDTO); zbomCRMService.dealCustomerLogData(customerLog); return ApiResponse.success("操作成功"); } @@ -126,7 +133,16 @@ }) public ApiResponse saveTestTrimStyle(@RequestBody TestTrimStyleDTO testTrimStyleDTO) { testTrimStyleDTO.setMemberId(getMemberId()); customerService.saveTestTrimStyle(testTrimStyleDTO); CustomerLog customerLog = customerService.saveTestTrimStyle(testTrimStyleDTO); zbomCRMService.dealCustomerLogData(customerLog); return ApiResponse.success("操作成功"); } @LoginRequired @ApiOperation(value = "用户注销", notes = "客户端小程序") @GetMapping("/logOff") public ApiResponse logOff() { memberService.logOff(getMemberId()); return ApiResponse.success("操作成功"); } server/web/src/main/java/com/doumee/api/web/PersonnelApi.java
@@ -3,14 +3,17 @@ import com.doumee.config.annotation.UserLoginRequired; import com.doumee.core.annotation.trace.Trace; import com.doumee.core.model.ApiResponse; import com.doumee.dao.business.model.SmsEmail; import com.doumee.dao.web.response.AccountResponse; import com.doumee.service.business.MemberService; import com.doumee.service.business.SmsEmailService; import com.doumee.service.business.UsersService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.checkerframework.checker.units.qual.A; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -33,6 +36,9 @@ @Autowired public UsersService usersService; @Autowired public SmsEmailService smsEmailService; @ApiOperation(value = "小程序登陆", notes = "员工端小程序") @GetMapping("/loginByWx") @@ -44,6 +50,20 @@ } @ApiOperation(value = "发送短信验证码", notes = "员工端小程序") @GetMapping("/sendSms") @ApiImplicitParams({ @ApiImplicitParam(paramType = "query", dataType = "String", name = "phone", value = "手机号", required = true), }) public ApiResponse sendSms(@RequestParam String phone) { SmsEmail smsEmail = new SmsEmail(); smsEmail.setPhone(phone); smsEmailService.sendSms(smsEmail); return ApiResponse.success("发送成功"); } @ApiOperation(value = "手机号验证码登陆", notes = "员工端小程序") @GetMapping("/loginByPhone") @ApiImplicitParams({