| | |
| | | import com.doumee.core.utils.DateUtil; |
| | | import com.doumee.core.utils.Utils; |
| | | import com.doumee.core.wx.WxMiniConfig; |
| | | import com.doumee.dao.business.*; |
| | | import com.doumee.dao.business.MemberMapper; |
| | | import com.doumee.dao.business.ShopMapper; |
| | | import com.doumee.dao.business.SmsrecordMapper; |
| | |
| | | import com.doumee.dao.business.model.*; |
| | | import com.doumee.dao.system.SystemUserMapper; |
| | | import com.doumee.dao.system.dto.MemberRechargeDTO; |
| | | import com.doumee.dao.system.dto.PlatformConfigDTO; |
| | | import com.doumee.dao.web.dto.MemberOwnDTO; |
| | | import com.doumee.dao.web.dto.shop.Position; |
| | | import com.doumee.dao.system.model.SystemUser; |
| | |
| | | import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.doumee.service.system.SystemDictDataService; |
| | | import com.github.yulichang.wrapper.MPJLambdaWrapper; |
| | | import io.swagger.models.auth.In; |
| | | import io.swagger.util.Yaml; |
| | |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * 用户信息表Service实现 |
| | | * 客户信息表Service实现 |
| | | * @author 江蹄蹄 |
| | | * @date 2023/03/21 15:48 |
| | | */ |
| | |
| | | |
| | | @Autowired |
| | | private MemberMapper memberMapper; |
| | | |
| | | @Autowired |
| | | private CouponMapper couponMapper; |
| | | @Autowired |
| | | private MemberCouponJoinMapper memberCouponJoinMapper; |
| | | @Autowired |
| | | private IntegralMapper integralMapper; |
| | | @Autowired |
| | | private ShopMapper shopMapper; |
| | | @Autowired |
| | | private UserActionMapper userActionMapper; |
| | | |
| | | |
| | | @Autowired |
| | | private SmsrecordMapper smsrecordMapper; |
| | |
| | | @Autowired |
| | | private MemberJoinMapper memberJoinMapper; |
| | | |
| | | @Autowired |
| | | private InviteRecordMapper inviteRecordMapper; |
| | | |
| | | |
| | | @Autowired |
| | | private SystemUserMapper systemUserMapper; |
| | | |
| | | @Autowired |
| | | private SystemDictDataBiz systemDictDataBiz; |
| | | |
| | | @Autowired |
| | | private SystemDictDataService systemDictDataService; |
| | | |
| | | @Autowired |
| | | private UploadFileService uploadFileService; |
| | |
| | | member.setEditor(user.getId()); |
| | | memberMapper.updateById(member); |
| | | } |
| | | @Override |
| | | @Transactional |
| | | public void updateShop(Member member) { |
| | | if(member.getBindShopId()==null || member.getId()==null){ |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST); |
| | | } |
| | | MPJLambdaWrapper<Member> queryWrapper =new MPJLambdaWrapper<>(); |
| | | queryWrapper.selectAll(Member.class); |
| | | queryWrapper.selectAs(Shop::getName,Member::getShopName); |
| | | queryWrapper.leftJoin(Shop.class, Shop::getId,Member::getBindShopId); |
| | | queryWrapper.eq(Member::getId,member.getId()); |
| | | Member model = memberMapper.selectJoinOne(Member.class,queryWrapper); |
| | | if(model == null ||Constants.equalsObject(model.getIsdeleted(),Constants.ONE)){ |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"客户信息查询无效!"); |
| | | } |
| | | if(model.getBindShopId() == null){ |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"客户尚未绑定经销商信息,无法更换!"); |
| | | } |
| | | if(Constants.equalsInteger(model.getBindShopId() ,member.getBindShopId())){ |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"请选择新的经销商!"); |
| | | } |
| | | |
| | | Shop shop = shopMapper.selectById(member.getBindShopId()); |
| | | if(shop == null ||Constants.equalsObject(shop.getIsdeleted(),Constants.ONE)){ |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"经销商信息查询无效!"); |
| | | } |
| | | LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); |
| | | |
| | | Date date = new Date(); |
| | | memberMapper.update(null,new UpdateWrapper<Member>().lambda() |
| | | .eq(Member::getId,member.getId()) |
| | | .set(Member::getEditDate,date) |
| | | .set(Member::getEditor,user.getId()) |
| | | .set(Member::getBindShopId,member.getBindShopId()) |
| | | ); |
| | | //更换日志记录 |
| | | UserActionServiceImpl.saveUserActionBiz(user,member.getId(), |
| | | Constants.UserActionType.CHANGE_SHOP, |
| | | userActionMapper, |
| | | date, |
| | | new String[]{user.getUsername(),DateUtil.getPlusTime2(date)}, |
| | | JSONObject.toJSONString(member) , |
| | | model.getShopName(), shop.getName()); |
| | | } |
| | | |
| | | @Override |
| | | public void updateByIdInBatch(List<Member> members) { |
| | |
| | | MPJLambdaWrapper<Member> queryWrapper = new MPJLambdaWrapper<>(); |
| | | Utils.MP.blankToNull(pageWrap.getModel()); |
| | | queryWrapper.selectAll(Member.class); |
| | | queryWrapper.selectAs(Shop::getName,Member::getShopName); |
| | | queryWrapper.leftJoin(Shop.class, Shop::getId,Member::getBindShopId); |
| | | queryWrapper.and(StringUtils.isNotBlank(pageWrap.getModel().getNickname()),ms->ms.like(Member::getNickname,pageWrap.getModel().getNickname()) |
| | | .or().like(Member::getName,pageWrap.getModel().getNickname()) |
| | | .or().like(Member::getPhone,pageWrap.getModel().getNickname()) |
| | | ); |
| | | queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getShopName()),Shop::getStatus,pageWrap.getModel().getShopName()); |
| | | queryWrapper.eq(pageWrap.getModel().getStatus()!=null,Member::getStatus,pageWrap.getModel().getStatus()); |
| | | queryWrapper.eq(Member::getIsdeleted,Constants.ZERO); |
| | | |
| | | queryWrapper.ge(pageWrap.getModel().getStarttime()!=null, Member::getCreateDate,pageWrap.getModel().getStarttime()); |
| | | queryWrapper.le(pageWrap.getModel().getEndtime()!=null,Member::getCreateDate, pageWrap.getModel().getEndtime()); |
| | | |
| | |
| | | |
| | | |
| | | @Override |
| | | public AccountResponse wxLogin(String code,Integer recId){ |
| | | public AccountResponse wxLogin(String code){ |
| | | try { |
| | | //获取微信敏感数据 |
| | | WxMaJscode2SessionResult session = WxMiniConfig.wxMaService.getUserService().getSessionInfo(code); |
| | |
| | | AccountResponse accountResponse = new AccountResponse(); |
| | | accountResponse.setSessionKey(session.getSessionKey()); |
| | | if(Objects.nonNull(member)){ |
| | | if(Objects.isNull(member.getRecId())){ |
| | | member.setRecId(recId); |
| | | } |
| | | memberMapper.updateById(member); |
| | | member.setImgFullUrl(systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+ |
| | | systemDictDataBiz.queryByCode(Constants.OSS,Constants.MEMBER_FILE).getCode()+member.getImgurl()); |
| | |
| | | return accountResponse; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 根据openid获取是否绑定了商户 |
| | | * @param openid |
| | | * @param memberId |
| | | * @return |
| | | */ |
| | | public AccountResponse shopOpenidLogin(String openid, Integer memberId){ |
| | | Shop shop = shopMapper.selectOne(new QueryWrapper<Shop>().lambda().eq(Shop::getOpenId, openid) |
| | | .eq(Shop::getIsdeleted,Constants.ZERO) |
| | | .last("limit 1") |
| | | ); |
| | | AccountResponse accountResponse = new AccountResponse(); |
| | | accountResponse.setOpenid(openid); |
| | | if(Objects.nonNull(shop)){ |
| | | if(Objects.isNull(memberId) |
| | | && ( Objects.isNull(shop.getMemberId()) |
| | | || !Constants.equalsInteger(shop.getMemberId(),memberId))){ |
| | | shopMapper.update(null,new UpdateWrapper<Shop>().lambda() |
| | | .set(Shop::getMemberId,memberId) |
| | | .eq(Shop::getId,shop.getId()) |
| | | ); |
| | | } |
| | | JwtPayLoad payLoad = new JwtPayLoad(Constants.SHOP_PREFIX+shop.getId()); |
| | | String token = JwtTokenUtil.generateToken(payLoad); |
| | | accountResponse.setToken(token); |
| | | } |
| | | return accountResponse; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 商户账号密码登录 |
| | | * @param userName |
| | | * @param password |
| | | * @param openid |
| | | * @param memberId |
| | | * @return |
| | | */ |
| | | public AccountResponse shopPasswordLogin(String userName,String password,String openid,String memberId){ |
| | | if(StringUtils.isBlank(userName) |
| | | || StringUtils.isBlank(password)){ |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"用户名或密码不能为空"); |
| | | } |
| | | Shop shop = shopMapper.selectOne(new QueryWrapper<Shop>().lambda().eq(Shop::getUsername, userName) |
| | | .eq(Shop::getIsdeleted,Constants.ZERO) |
| | | .last("limit 1") |
| | | ); |
| | | if(shop==null){ |
| | | throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT); |
| | | } |
| | | //加密密码 |
| | | String pwd = Utils.Secure.encryptPassword(password, shop.getSalt()); |
| | | if(!pwd.equals(shop.getPassword())){ |
| | | throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT); |
| | | } |
| | | //创建token |
| | | JwtPayLoad payLoad = new JwtPayLoad(Constants.SHOP_PREFIX+shop.getId()); |
| | | String token = JwtTokenUtil.generateToken(payLoad); |
| | | AccountResponse accountResponse = new AccountResponse(); |
| | | accountResponse.setToken(token); |
| | | shopMapper.update(null,new UpdateWrapper<Shop>().lambda() |
| | | .set(Shop::getOpenId,openid) |
| | | .set(Shop::getMemberId,memberId) |
| | | .eq(Shop::getId,shop.getId()) |
| | | ); |
| | | shopMapper.update(null,new UpdateWrapper<Shop>().lambda() |
| | | .set(Shop::getOpenId,null) |
| | | .eq(Shop::getOpenId,openid) |
| | | .ne(Shop::getId,shop.getId()) |
| | | ); |
| | | return accountResponse; |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public AccountResponse wxPhone(WxPhoneRequest wxPhoneRequest){ |
| | | try { |
| | |
| | | member.setIsdeleted(Constants.ZERO); |
| | | member.setType(Constants.ZERO); |
| | | member.setOrigin(Constants.ZERO); |
| | | member.setRecId(wxPhoneRequest.getRecId()); |
| | | if(!this.checkIsCreateInvite(phone)){ |
| | | member.setRecId(Constants.getInviteCode(wxPhoneRequest.getRecId())); |
| | | } |
| | | member.setOpenId(wxPhoneRequest.getOpenid()); |
| | | } |
| | | member.setPhone(phone); |
| | |
| | | systemDictDataBiz.queryByCode(Constants.OSS,Constants.MEMBER_FILE).getCode()+member.getImgurl()); |
| | | if(Objects.isNull(member.getId())){ |
| | | memberMapper.insert(member); |
| | | |
| | | PlatformConfigDTO platformConfigDTO = systemDictDataService.getPlatformConfigDTO(); |
| | | this.createRegionReward(member,platformConfigDTO); |
| | | //创建邀请记录 |
| | | this.createInviteRecord(member,platformConfigDTO); |
| | | member.setSharingCode(this.createShareCode(member.getId())); |
| | | memberMapper.updateById(member); |
| | | }else{ |
| | |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"更新手机号失败"); |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 发放注册奖励信息 |
| | | * @param member |
| | | * @param platformConfigDTO |
| | | */ |
| | | public void createRegionReward(Member member,PlatformConfigDTO platformConfigDTO){ |
| | | //查询用户是否注销过 |
| | | if(memberMapper.selectCount(new QueryWrapper<Member>().lambda() |
| | | .eq(Member::getIsdeleted,Constants.ONE) |
| | | .eq(Member::getPhone,member.getPhone()) |
| | | )>Constants.ZERO){ |
| | | return; |
| | | } |
| | | //开启注册送积分 |
| | | if(Constants.equalsInteger(platformConfigDTO.getRegIntegralRewardStatus(),Constants.ZERO)){ |
| | | DealIntegralRequest dealIntegralRequest = new DealIntegralRequest(); |
| | | dealIntegralRequest.setIntegralNum(platformConfigDTO.getRegIntegralReward()); |
| | | dealIntegralRequest.setDealType(Constants.ZERO); |
| | | dealIntegralRequest.setMemberId(member.getId()); |
| | | dealIntegralRequest.setIntegralObjType(Constants.IntegralObjType.REGISTER); |
| | | integralService.dealIntegral(dealIntegralRequest); |
| | | } |
| | | //开启注册送优惠券 |
| | | if(Constants.equalsInteger(platformConfigDTO.getRegCouponRewardStatus(),Constants.ZERO)){ |
| | | List<JSONObject> regCouponRewardList = platformConfigDTO.getRegCouponRewardList(); |
| | | //[{"num":"2","couponId":6},{"num":"3","couponId":5}] |
| | | if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(regCouponRewardList)){ |
| | | List<MemberCoupon> memberCouponList = new ArrayList<>(); |
| | | for (JSONObject jsonObject:regCouponRewardList) { |
| | | Integer couponId = jsonObject.getInteger("couponId"); |
| | | Integer num = jsonObject.getInteger("num"); |
| | | Coupon coupon = couponMapper.selectById(couponId); |
| | | if(Objects.isNull(coupon)||Constants.equalsInteger(coupon.getIsdeleted(),Constants.ONE)&&num>Constants.ZERO){ |
| | | continue; |
| | | } |
| | | MemberCoupon memberCoupon = MemberCoupon.couponToBean(coupon,member,new Date(),Constants.ZERO,null); |
| | | for (int i = 0; i < num; i++) { |
| | | memberCouponList.add(memberCoupon); |
| | | } |
| | | } |
| | | if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(memberCouponList)){ |
| | | memberCouponJoinMapper.insert(memberCouponList); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 创建邀请记录 |
| | | * @param member |
| | | */ |
| | | public void createInviteRecord(Member member,PlatformConfigDTO platformConfigDTO){ |
| | | if(Objects.isNull(member.getRecId())){ |
| | | return; |
| | | } |
| | | InviteRecord inviteRecord = new InviteRecord(); |
| | | inviteRecord.setCreateDate(new Date()); |
| | | inviteRecord.setIsdeleted(Constants.ZERO); |
| | | inviteRecord.setInviteId(member.getRecId()); |
| | | inviteRecord.setMemberId(member.getId()); |
| | | inviteRecord.setPhone(member.getPhone()); |
| | | inviteRecord.setRewardIntegral(Objects.nonNull(platformConfigDTO)&&Constants.equalsInteger(platformConfigDTO.getShareIntegralRewardStatus(),Constants.ZERO)? |
| | | platformConfigDTO.getShareIntegralReward():BigDecimal.ZERO); |
| | | inviteRecord.setFirstOrderStatus(Constants.ZERO); |
| | | inviteRecordMapper.insert(inviteRecord); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 查询是否创建过邀请 |
| | | * @param mobile |
| | | * @return |
| | | */ |
| | | public Boolean checkIsCreateInvite(String mobile){ |
| | | return inviteRecordMapper.selectCount(new QueryWrapper<InviteRecord>() |
| | | .lambda() |
| | | .eq(InviteRecord::getPhone,mobile) |
| | | )>Constants.ZERO?true:false; |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | |
| | | |
| | | Integer mId = Optional.ofNullable(userInfo) |
| | | .map(s -> s.getMemberId()) |
| | | .orElseThrow(() -> new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "用户ID缺失")); |
| | | .orElseThrow(() -> new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "客户ID缺失")); |
| | | Member member = new Member(); |
| | | member.setId(mId); |
| | | member.setEditor(userInfo.getId()); |
| | |
| | | if(phoneNums.size() != members.size()){ |
| | | List<String> collect = members.stream().map(s -> s.getPhone()).collect(Collectors.toList()); |
| | | List<String> unFindMember = phoneNums.stream().filter(s -> !collect.contains(s)).collect(Collectors.toList()); |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),unFindMember.toString()+"不存在该手机号码用户"); |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),unFindMember.toString()+"不存在该手机号码客户"); |
| | | } |
| | | Map<String, MemberRechargeDTO> collect = dataList.stream().collect(Collectors.toMap(s -> s.getPhone(), s -> s)); |
| | | members.forEach(s->{ |
| | |
| | | |
| | | Member member = memberMapper.selectById(memberRechargeDTO.getMemberId()); |
| | | |
| | | //如果扣除金额大于用户拥金额 取用户剩余金额 |
| | | //如果扣除金额大于客户拥金额 取客户剩余金额 |
| | | BigDecimal integralNum = new BigDecimal(memberRechargeDTO.getNum()); |
| | | if (Constants.equalsInteger(memberRechargeDTO.getIntegralType(),Constants.ONE) |
| | | && (member.getIntegral().compareTo(integralNum) == -1) |