package com.iamberry.wechat.service.member; import java.text.SimpleDateFormat; import java.util.*; import com.iamberry.app.tool.log.RatFWLogger; import com.iamberry.wechat.core.entity.coupon.CouponItem; import com.iamberry.wechat.core.entity.coupon.CouponType; import com.iamberry.wechat.face.ism.IntegralLogService; import com.iamberry.wechat.service.mapper.CouponItemMapper; import com.iamberry.wechat.service.mapper.CouponTypeMapper; import com.iamberry.wechat.tools.ResultInfo; import com.iamberry.wechat.tools.SendMessageUtil; import com.iamberry.wechat.tools.StrUtils; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.iamberry.wechat.core.entity.Page; import com.iamberry.wechat.core.entity.drp.PlaceInfo; import com.iamberry.wechat.core.entity.member.Member; import com.iamberry.wechat.face.member.MemberService; import com.iamberry.wechat.face.qrcode.QrcodeService; import com.iamberry.wechat.service.mapper.PlaceInfoMapper; import com.iamberry.wechat.service.member.dao.MemberDao; import com.iamberry.wechat.service.system.dao.SystemDao; import org.springframework.transaction.annotation.Transactional; /** * 会员信息 service 实现 * 2016年4月21日 * @author Administrator * */ @Service public class MemberServiceImpl implements MemberService { @Autowired private MemberDao memberDao; @Autowired private PlaceInfoMapper placeInfoMapper; @Autowired public QrcodeService qrcodeService; @Autowired public SystemDao systemDao; @Autowired public CouponTypeMapper couponTypeMapper; @Autowired public CouponItemMapper couponItemMapper; @Autowired private IntegralLogService integralLogService; @Autowired private SendMessageUtil sendMessageUtil; @Autowired private RatFWLogger logger; /** * 根据userid得到会员信息 * @param userId * @return */ @Override public Member getMemberByUserId(Integer userId) { // TODO Auto-generated method stub return memberDao.getMemberByUserId(userId); } /** * 根据 openid 查询一个member * 2016年4月28日 * @author 穆再兴 * @return */ public Member getMemberByUserOpenId(String openid){ return memberDao.getMemberByUserOpenId(openid); } @Override public Integer getCount() { return memberDao.getCount(); } @Override public List getMemberByPage(Page page) { // TODO Auto-generated method stub return memberDao.getMemberByPage(page); } @Override public Integer updateUserIntegral(Member member) { // TODO Auto-generated method stub return memberDao.updateUserIntegral(member); } /** * 根据 userid 修改会员信息 * 2016年4月21日 * @author 穆再兴 * @param userId * @return */ @Override public Integer updateMemberByUserId(Member member){ return memberDao.updateMemberByUserId(member); } @Override public Integer updateUserUseIntegral(Member member) { // TODO Auto-generated method stub return memberDao.updateUserUseIntegral(member); } @Override public List selectUserIntegralByWechatProxyId(Page page) { // TODO Auto-generated method stub return memberDao.selectUserIntegralByWechatProxyId(page); } @Override public Member selectUserIdentityAndQrcodeByOpenId(String openid) { // TODO Auto-generated method stub return memberDao.selectUserIdentityAndQrcodeByOpenId(openid); } @Override public Member selectUserResAndIdSByOpenId(String openid) { // TODO Auto-generated method stub return memberDao.selectUserResAndIdSByOpenId(openid); } /** * 根据 openid 修改用户可用金额 * 2016年5月4日 * @param member * @return */ public Integer updateUserIncomeByOpenId(Member member){ return memberDao.updateUserIncomeByOpenId(member); } @Override public boolean updateUserFlagByOpenId(String openId) { // TODO Auto-generated method stub return memberDao.updateUserFlagByOpenId(openId) >= 1 ? true : false; } /** * 根据userid获取当前用户的“下线人数”和“已购买人数” * 2016年5月11日 * @param openId * @return */ public List selectDownCountByUserId(Integer userId){ return memberDao.selectDownCountByUserId(userId); } @Override public boolean buildChildUser(String shareOpenid, Member member,int userType) { // TODO Auto-generated method stub if(StringUtils.isNotEmpty(shareOpenid) && member != null){ //绑定关系 if(!shareOpenid.equals(member.getUserOpenid())){//用户点击自己分享的链接则不绑定 boolean flag = false; if(userType == 1){ //绑定为微代理下线 flag = qrcodeService.bulidUser(member.getUserOpenid(), shareOpenid, 1); }else if(userType == 2){ PlaceInfo placeInfo = placeInfoMapper.getOnePlaceInfo2(shareOpenid); //内容格式:商户层可以绑定关系的角色id:41,42 41 42 分别为可以绑定关系的角色id String str = systemDao.selectOneShopRuleById(121).getRuleDesc(); //System.out.println("--systemDao.selectOneShopRuleById(121).getRuleDesc()-------------------------" + str); String rolesStr = str.split(":")[1]; String[] roleArr = rolesStr.split(","); if(placeInfo != null && Arrays.asList(roleArr).contains(Integer.toString(placeInfo.getRoleId()))){ //改商户存在并且为可以绑定关系的就是 则绑定为其下线 flag = qrcodeService.bulidUser(member.getUserOpenid(), placeInfo.getId(), 2); } } return flag; } } return false; } @Override public Map getDownInfoAndBuyedCount(Page page) { List list = memberDao.selectUserIntegralByWechatProxyId(page); List countList = memberDao.selectDownCountByUserId(page.getTotalRecord()); //page.getTotalRecord 用户userid int downNum = 0; //下线人数 int buyedNum = 0; //已购买人数 if(countList.size() == 2){ downNum = countList.get(0); buyedNum = countList.get(1); } Map map = new HashMap(); map.put("downNum", downNum); map.put("buyedNum", buyedNum); if(list.size()>0){ map.put("beginNo", list.get(0).getUserId()); map.put("endNo", list.get(list.size()-1).getUserId()); } map.put("list", list); return map; } @Override public Integer nowUpdateUserByOpenId(Member member) { return memberDao.nowUpdateUserByOpenId(member); } @Override @Transactional public Integer becomeVipByOpenId(Member member) { Integer flag = memberDao.becomeVipByOpenId(member); if(flag < 1){ throw new RuntimeException("成为会员失败"); } flag = integralLogService.updateIntegral(member.getUserOpenid(),1,1); if(flag < 1){ throw new RuntimeException("添加积分失败"); } Integer couponId = 40001; CouponType couponType = couponTypeMapper.getCouponTypeById(couponId); Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.DATE,90); calendar.set(Calendar.HOUR_OF_DAY,23); calendar.set(Calendar.MINUTE,59); calendar.set(Calendar.SECOND,50); //创建优惠券 CouponItem couponItem = new CouponItem(); String uuidStr = StrUtils.getUUID(); couponItem.setCouponItemId(uuidStr); couponItem.setCouponItemUseropenid(member.getUserOpenid()); couponItem.setCouponId(couponType.getCouponId()); couponItem.setCouponReceiveDate(new Date()); couponItem.setCouponUseEndDate(calendar.getTime()); couponItem.setCouponUseStatus(1); couponItem.setCouponItemRemark(couponType.getCouponRemark()); flag = couponItemMapper.insertCouponItem(couponItem); if(flag < 1){ throw new RuntimeException("赠送买一送一优惠券失败"); } //当天生日,当天送 SimpleDateFormat sdf = new SimpleDateFormat("MMdd"); String memberBirhDate = sdf.format(member.getUserBirthDate()); String nowDate = sdf.format(new Date()); if(nowDate.equals(memberBirhDate)){ Integer nowcouponId = 40000; CouponType nowcouponType = couponTypeMapper.getCouponTypeById(nowcouponId); Calendar nowcalendar = Calendar.getInstance(); nowcalendar.set(Calendar.HOUR_OF_DAY,23); nowcalendar.set(Calendar.MINUTE,59); nowcalendar.set(Calendar.SECOND,50); //创建优惠券 CouponItem nowcouponItem = new CouponItem(); String nowuuidStr = StrUtils.getUUID(); nowcouponItem.setCouponItemId(nowuuidStr); nowcouponItem.setCouponItemUseropenid(member.getUserOpenid()); nowcouponItem.setCouponId(nowcouponType.getCouponId()); nowcouponItem.setCouponReceiveDate(new Date()); nowcouponItem.setCouponUseEndDate(nowcalendar.getTime()); nowcouponItem.setCouponUseStatus(1); nowcouponItem.setCouponItemRemark(nowcouponType.getCouponRemark()); flag = couponItemMapper.insertCouponItem(nowcouponItem); if(flag < 1){ throw new RuntimeException("赠送生日优惠券失败"); } } try { sendMessageUtil.recommendUseCoupon( "亲爱的用户,恭喜您注册成功!现在就可享受专属会员折扣(购买滤芯产品88折,非滤芯产品95折),100会员积分、单支滤芯买一送一优惠券已发放至您的账户。", "会员积分+会员专享折扣+滤芯买赠优惠券", "单支滤芯买一送一优惠券有效期3个月", "可在“我的爱贝源-会员中心”查看积分及优惠券,请及时使用优惠券。", member.getUserOpenid(), ResultInfo.COUPON_URL); }catch (Exception e){ logger.info("注册成功提醒使用优惠券失败,失败openId:" + member.getUserOpenid()); e.printStackTrace(); } return flag; } @Override public List getNowBirthDate() { return memberDao.getNowBirthDate(); } @Override public List getNoRegister(Member member) { return memberDao.getNoRegister(member); } }