MemberServiceImpl.java 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  1. package com.iamberry.wechat.service.member;
  2. import java.text.SimpleDateFormat;
  3. import java.util.*;
  4. import com.iamberry.app.tool.log.RatFWLogger;
  5. import com.iamberry.wechat.core.entity.coupon.CouponItem;
  6. import com.iamberry.wechat.core.entity.coupon.CouponType;
  7. import com.iamberry.wechat.face.ism.IntegralLogService;
  8. import com.iamberry.wechat.service.mapper.CouponItemMapper;
  9. import com.iamberry.wechat.service.mapper.CouponTypeMapper;
  10. import com.iamberry.wechat.tools.ResultInfo;
  11. import com.iamberry.wechat.tools.SendMessageUtil;
  12. import com.iamberry.wechat.tools.StrUtils;
  13. import org.apache.commons.lang.StringUtils;
  14. import org.springframework.beans.factory.annotation.Autowired;
  15. import org.springframework.stereotype.Service;
  16. import com.iamberry.wechat.core.entity.Page;
  17. import com.iamberry.wechat.core.entity.drp.PlaceInfo;
  18. import com.iamberry.wechat.core.entity.member.Member;
  19. import com.iamberry.wechat.face.member.MemberService;
  20. import com.iamberry.wechat.face.qrcode.QrcodeService;
  21. import com.iamberry.wechat.service.mapper.PlaceInfoMapper;
  22. import com.iamberry.wechat.service.member.dao.MemberDao;
  23. import com.iamberry.wechat.service.system.dao.SystemDao;
  24. import org.springframework.transaction.annotation.Transactional;
  25. /**
  26. * 会员信息 service 实现
  27. * 2016年4月21日
  28. * @author Administrator
  29. *
  30. */
  31. @Service
  32. public class MemberServiceImpl implements MemberService {
  33. @Autowired
  34. private MemberDao memberDao;
  35. @Autowired
  36. private PlaceInfoMapper placeInfoMapper;
  37. @Autowired
  38. public QrcodeService qrcodeService;
  39. @Autowired
  40. public SystemDao systemDao;
  41. @Autowired
  42. public CouponTypeMapper couponTypeMapper;
  43. @Autowired
  44. public CouponItemMapper couponItemMapper;
  45. @Autowired
  46. private IntegralLogService integralLogService;
  47. @Autowired
  48. private SendMessageUtil sendMessageUtil;
  49. @Autowired
  50. private RatFWLogger logger;
  51. /**
  52. * 根据userid得到会员信息
  53. * @param userId
  54. * @return
  55. */
  56. @Override
  57. public Member getMemberByUserId(Integer userId) {
  58. // TODO Auto-generated method stub
  59. return memberDao.getMemberByUserId(userId);
  60. }
  61. /**
  62. * 根据 openid 查询一个member
  63. * 2016年4月28日
  64. * @author 穆再兴
  65. * @return
  66. */
  67. public Member getMemberByUserOpenId(String openid){
  68. return memberDao.getMemberByUserOpenId(openid);
  69. }
  70. @Override
  71. public Integer getCount() {
  72. return memberDao.getCount();
  73. }
  74. @Override
  75. public List<Member> getMemberByPage(Page page) {
  76. // TODO Auto-generated method stub
  77. return memberDao.getMemberByPage(page);
  78. }
  79. @Override
  80. public Integer updateUserIntegral(Member member) {
  81. // TODO Auto-generated method stub
  82. return memberDao.updateUserIntegral(member);
  83. }
  84. /**
  85. * 根据 userid 修改会员信息
  86. * 2016年4月21日
  87. * @author 穆再兴
  88. * @param userId
  89. * @return
  90. */
  91. @Override
  92. public Integer updateMemberByUserId(Member member){
  93. return memberDao.updateMemberByUserId(member);
  94. }
  95. @Override
  96. public Integer updateUserUseIntegral(Member member) {
  97. // TODO Auto-generated method stub
  98. return memberDao.updateUserUseIntegral(member);
  99. }
  100. @Override
  101. public List<Member> selectUserIntegralByWechatProxyId(Page page) {
  102. // TODO Auto-generated method stub
  103. return memberDao.selectUserIntegralByWechatProxyId(page);
  104. }
  105. @Override
  106. public Member selectUserIdentityAndQrcodeByOpenId(String openid) {
  107. // TODO Auto-generated method stub
  108. return memberDao.selectUserIdentityAndQrcodeByOpenId(openid);
  109. }
  110. @Override
  111. public Member selectUserResAndIdSByOpenId(String openid) {
  112. // TODO Auto-generated method stub
  113. return memberDao.selectUserResAndIdSByOpenId(openid);
  114. }
  115. /**
  116. * 根据 openid 修改用户可用金额
  117. * 2016年5月4日
  118. * @param member
  119. * @return
  120. */
  121. public Integer updateUserIncomeByOpenId(Member member){
  122. return memberDao.updateUserIncomeByOpenId(member);
  123. }
  124. @Override
  125. public boolean updateUserFlagByOpenId(String openId) {
  126. // TODO Auto-generated method stub
  127. return memberDao.updateUserFlagByOpenId(openId) >= 1 ? true : false;
  128. }
  129. /**
  130. * 根据userid获取当前用户的“下线人数”和“已购买人数”
  131. * 2016年5月11日
  132. * @param openId
  133. * @return
  134. */
  135. public List<Integer> selectDownCountByUserId(Integer userId){
  136. return memberDao.selectDownCountByUserId(userId);
  137. }
  138. @Override
  139. public boolean buildChildUser(String shareOpenid, Member member,int userType) {
  140. // TODO Auto-generated method stub
  141. if(StringUtils.isNotEmpty(shareOpenid) && member != null){
  142. //绑定关系
  143. if(!shareOpenid.equals(member.getUserOpenid())){//用户点击自己分享的链接则不绑定
  144. boolean flag = false;
  145. if(userType == 1){
  146. //绑定为微代理下线
  147. flag = qrcodeService.bulidUser(member.getUserOpenid(), shareOpenid, 1);
  148. }else if(userType == 2){
  149. PlaceInfo placeInfo = placeInfoMapper.getOnePlaceInfo2(shareOpenid);
  150. //内容格式:商户层可以绑定关系的角色id:41,42 41 42 分别为可以绑定关系的角色id
  151. String str = systemDao.selectOneShopRuleById(121).getRuleDesc();
  152. //System.out.println("--systemDao.selectOneShopRuleById(121).getRuleDesc()-------------------------" + str);
  153. String rolesStr = str.split(":")[1];
  154. String[] roleArr = rolesStr.split(",");
  155. if(placeInfo != null &&
  156. Arrays.asList(roleArr).contains(Integer.toString(placeInfo.getRoleId()))){
  157. //改商户存在并且为可以绑定关系的就是 则绑定为其下线
  158. flag = qrcodeService.bulidUser(member.getUserOpenid(), placeInfo.getId(), 2);
  159. }
  160. }
  161. return flag;
  162. }
  163. }
  164. return false;
  165. }
  166. @Override
  167. public Map<String, Object> getDownInfoAndBuyedCount(Page page) {
  168. List<Member> list = memberDao.selectUserIntegralByWechatProxyId(page);
  169. List<Integer> countList = memberDao.selectDownCountByUserId(page.getTotalRecord()); //page.getTotalRecord 用户userid
  170. int downNum = 0; //下线人数
  171. int buyedNum = 0; //已购买人数
  172. if(countList.size() == 2){
  173. downNum = countList.get(0);
  174. buyedNum = countList.get(1);
  175. }
  176. Map<String, Object> map = new HashMap<String, Object>();
  177. map.put("downNum", downNum);
  178. map.put("buyedNum", buyedNum);
  179. if(list.size()>0){
  180. map.put("beginNo", list.get(0).getUserId());
  181. map.put("endNo", list.get(list.size()-1).getUserId());
  182. }
  183. map.put("list", list);
  184. return map;
  185. }
  186. @Override
  187. public Integer nowUpdateUserByOpenId(Member member) {
  188. return memberDao.nowUpdateUserByOpenId(member);
  189. }
  190. @Override
  191. @Transactional
  192. public Integer becomeVipByOpenId(Member member) {
  193. Integer flag = memberDao.becomeVipByOpenId(member);
  194. if(flag < 1){
  195. throw new RuntimeException("成为会员失败");
  196. }
  197. flag = integralLogService.updateIntegral(member.getUserOpenid(),1,1);
  198. if(flag < 1){
  199. throw new RuntimeException("添加积分失败");
  200. }
  201. Integer couponId = 40001;
  202. CouponType couponType = couponTypeMapper.getCouponTypeById(couponId);
  203. Calendar calendar = Calendar.getInstance();
  204. calendar.add(Calendar.DATE,90);
  205. calendar.set(Calendar.HOUR_OF_DAY,23);
  206. calendar.set(Calendar.MINUTE,59);
  207. calendar.set(Calendar.SECOND,50);
  208. //创建优惠券
  209. CouponItem couponItem = new CouponItem();
  210. String uuidStr = StrUtils.getUUID();
  211. couponItem.setCouponItemId(uuidStr);
  212. couponItem.setCouponItemUseropenid(member.getUserOpenid());
  213. couponItem.setCouponId(couponType.getCouponId());
  214. couponItem.setCouponReceiveDate(new Date());
  215. couponItem.setCouponUseEndDate(calendar.getTime());
  216. couponItem.setCouponUseStatus(1);
  217. couponItem.setCouponItemRemark(couponType.getCouponRemark());
  218. flag = couponItemMapper.insertCouponItem(couponItem);
  219. if(flag < 1){
  220. throw new RuntimeException("赠送买一送一优惠券失败");
  221. }
  222. //当天生日,当天送
  223. SimpleDateFormat sdf = new SimpleDateFormat("MMdd");
  224. String memberBirhDate = sdf.format(member.getUserBirthDate());
  225. String nowDate = sdf.format(new Date());
  226. if(nowDate.equals(memberBirhDate)){
  227. Integer nowcouponId = 40000;
  228. CouponType nowcouponType = couponTypeMapper.getCouponTypeById(nowcouponId);
  229. Calendar nowcalendar = Calendar.getInstance();
  230. nowcalendar.set(Calendar.HOUR_OF_DAY,23);
  231. nowcalendar.set(Calendar.MINUTE,59);
  232. nowcalendar.set(Calendar.SECOND,50);
  233. //创建优惠券
  234. CouponItem nowcouponItem = new CouponItem();
  235. String nowuuidStr = StrUtils.getUUID();
  236. nowcouponItem.setCouponItemId(nowuuidStr);
  237. nowcouponItem.setCouponItemUseropenid(member.getUserOpenid());
  238. nowcouponItem.setCouponId(nowcouponType.getCouponId());
  239. nowcouponItem.setCouponReceiveDate(new Date());
  240. nowcouponItem.setCouponUseEndDate(nowcalendar.getTime());
  241. nowcouponItem.setCouponUseStatus(1);
  242. nowcouponItem.setCouponItemRemark(nowcouponType.getCouponRemark());
  243. flag = couponItemMapper.insertCouponItem(nowcouponItem);
  244. if(flag < 1){
  245. throw new RuntimeException("赠送生日优惠券失败");
  246. }
  247. }
  248. try {
  249. sendMessageUtil.recommendUseCoupon(
  250. "亲爱的用户,恭喜您注册成功!现在就可享受专属会员折扣(购买滤芯产品88折,非滤芯产品95折),100会员积分、单支滤芯买一送一优惠券已发放至您的账户。",
  251. "会员积分+会员专享折扣+滤芯买赠优惠券",
  252. "单支滤芯买一送一优惠券有效期3个月",
  253. "可在“我的爱贝源-会员中心”查看积分及优惠券,请及时使用优惠券。",
  254. member.getUserOpenid(),
  255. ResultInfo.COUPON_URL);
  256. }catch (Exception e){
  257. logger.info("注册成功提醒使用优惠券失败,失败openId:" + member.getUserOpenid());
  258. e.printStackTrace();
  259. }
  260. return flag;
  261. }
  262. @Override
  263. public List<Member> getNowBirthDate() {
  264. return memberDao.getNowBirthDate();
  265. }
  266. @Override
  267. public List<Member> getNoRegister(Member member) {
  268. return memberDao.getNoRegister(member);
  269. }
  270. }