rk
6 小时以前 56fcde8c93a1a10bc50fac775e370a2db57f520e
server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -27,6 +27,7 @@
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;
@@ -42,6 +43,7 @@
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;
@@ -79,6 +81,10 @@
    @Autowired
    private MemberMapper memberMapper;
    @Autowired
    private CouponMapper couponMapper;
    @Autowired
    private MemberCouponJoinMapper memberCouponJoinMapper;
    @Autowired
    private IntegralMapper integralMapper;
    @Autowired
    private ShopMapper shopMapper;
@@ -93,12 +99,18 @@
    @Autowired
    private MemberJoinMapper memberJoinMapper;
    @Autowired
    private InviteRecordMapper inviteRecordMapper;
    @Autowired
    private SystemUserMapper systemUserMapper;
    @Autowired
    private SystemDictDataBiz systemDictDataBiz;
    @Autowired
    private SystemDictDataService systemDictDataService;
    @Autowired
    private UploadFileService uploadFileService;
@@ -187,65 +199,6 @@
                new String[]{user.getUsername(),DateUtil.getPlusTime2(date)},
                JSONObject.toJSONString(member) ,
                model.getShopName(), shop.getName());
    }
    @Override
    @Transactional
    public void updateIntegral(Integral param) {
        if(param.getMemberId()==null || param.getType()==null
                || param.getType()<0
                || param.getType()>2
                || Constants.formatBigdecimal(param.getNum()).compareTo(new BigDecimal(0))<=0){
            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,param.getMemberId());
        Member model = memberMapper.selectJoinOne(Member.class,queryWrapper);
        if(model == null ||Constants.equalsObject(model.getIsdeleted(),Constants.ONE)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"客户信息查询无效!");
        }
        BigDecimal num = param.getNum();
        if(param.getType() == 1 &&Constants.formatBigdecimal(model.getIntegral()).compareTo(param.getNum())<0){
            //如果是减少,判断用户余额是否满足
            num = num.multiply(new BigDecimal(-1));//减少
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"用户账户余额不足!");
        }
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        Date date = new Date();
        //账户余额
        memberMapper.update(null,new UpdateWrapper<Member>().lambda()
                .eq(Member::getId,model.getId())
                .set(Member::getEditDate,date)
                .set(Member::getEditor,user.getId())
                .setSql(param.getType() == 0,"total_integral = ifnull(total_integral,0)+" + num)//累计增加
                .setSql(param.getType() == 0,"integral = ifnull(integral,0)+" + param.getNum())
                .setSql(param.getType() == 1,"integral = ifnull(integral,0)-" + param.getNum()));
        Constants.IntegralObjType integralObjType = param.getType()==0?Constants.IntegralObjType.SYSTEM_RECHARGE:Constants.IntegralObjType.SYSTEM_DEDUCT;
        Integral integral = new Integral();
        integral.setMemberId(model.getId());
        integral.setCreateDate(new Date());
        integral.setCreator(user.getId());
        integral.setIsdeleted(Constants.ZERO);
        integral.setTitle(integralObjType.getName());
        integral.setContent(integralObjType.getNoteinfo());
        integral.setObjId(model.getId());
        integral.setObjType(integralObjType.getKey());
        integral.setType(param.getType());
        integral.setRemark(param.getRemark());
        integral.setNum(param.getNum());
        integral.setTotalNum(param.getType() == 0? Constants.formatBigdecimal(model.getIntegral()).add(integral.getNum()):Constants.formatBigdecimal(model.getIntegral()).subtract(integral.getNum()));
        integral.setOrderCode(null);
        integral.setUserType(Constants.ZERO);
        integralMapper.insert(integral);
    }
    @Override
@@ -346,7 +299,7 @@
    @Override
    public AccountResponse wxLogin(String code,Integer recId){
    public AccountResponse wxLogin(String code){
        try {
            //获取微信敏感数据
            WxMaJscode2SessionResult session = WxMiniConfig.wxMaService.getUserService().getSessionInfo(code);
@@ -363,9 +316,6 @@
            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());
@@ -392,80 +342,6 @@
        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 {
@@ -487,7 +363,9 @@
                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);
@@ -496,6 +374,11 @@
                    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{
@@ -517,6 +400,89 @@
    }
    /**
     * 发放注册奖励信息
     * @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;
    }
    public String createShareCode(Integer memberId){
        //生成分享码