MemberServiceImpl.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340
  1. package com.iamberry.wechat.service.member;
  2. import com.iamberry.app.tool.log.RatFWLogger;
  3. import com.iamberry.wechat.core.entity.Page;
  4. import com.iamberry.wechat.core.entity.drp.PlaceInfo;
  5. import com.iamberry.wechat.core.entity.member.Member;
  6. import com.iamberry.wechat.face.member.MemberService;
  7. import com.iamberry.wechat.service.ShopUtil;
  8. import com.iamberry.wechat.service.home.dao.HomeServiceDao;
  9. import com.iamberry.wechat.service.mapper.PlaceInfoMapper;
  10. import com.iamberry.wechat.service.member.dao.MemberDao;
  11. import com.iamberry.wechat.service.relationship.Dao.WdRelationDao;
  12. import com.iamberry.wechat.service.system.dao.SystemDao;
  13. import com.iamberry.wechat.tools.StaticInfo;
  14. import org.apache.commons.lang.StringUtils;
  15. import org.omg.CORBA.PUBLIC_MEMBER;
  16. import org.springframework.beans.factory.annotation.Autowired;
  17. import org.springframework.stereotype.Service;
  18. import java.util.Arrays;
  19. import java.util.HashMap;
  20. import java.util.List;
  21. import java.util.Map;
  22. import java.util.regex.Matcher;
  23. /**
  24. * 会员信息 service 实现
  25. * 2016年4月21日
  26. * @author Administrator
  27. *
  28. */
  29. @Service
  30. public class MemberServiceImpl implements MemberService {
  31. @Autowired
  32. private MemberDao memberDao;
  33. @Autowired
  34. private PlaceInfoMapper placeInfoMapper;
  35. @Autowired
  36. public SystemDao systemDao;
  37. @Autowired
  38. private HomeServiceDao homeServiceDao;
  39. @Autowired
  40. private WdRelationDao wdRelationDao;
  41. @Autowired
  42. private RatFWLogger log;
  43. /**
  44. * 根据userid得到会员信息
  45. * @param userId
  46. * @return
  47. */
  48. @Override
  49. public Member getMemberByUserId(Integer userId) {
  50. // TODO Auto-generated method stub
  51. return memberDao.getMemberByUserId(userId);
  52. }
  53. /**
  54. * 根据 openid 查询一个member
  55. * 2016年4月28日
  56. * @author 穆再兴
  57. * @return
  58. */
  59. public Member getMemberByUserOpenId(String openid){
  60. return memberDao.getMemberByUserOpenId(openid);
  61. }
  62. @Override
  63. public Integer getCount() {
  64. return memberDao.getCount();
  65. }
  66. @Override
  67. public List<Member> getMemberByPage(Page page) {
  68. return memberDao.getMemberByPage(page);
  69. }
  70. /**
  71. * 根据 userid 修改会员信息
  72. * 2016年4月21日
  73. * @author 穆再兴
  74. * @return
  75. */
  76. @Override
  77. public Integer updateMemberByUserId(Member member){
  78. return memberDao.updateMemberByUserId(member);
  79. }
  80. @Override
  81. public Integer updateUserUseIntegral(Member member) {
  82. // TODO Auto-generated method stub
  83. return memberDao.updateUserUseIntegral(member);
  84. }
  85. @Override
  86. public List<Member> selectUserIntegralByWechatProxyId(Page page) {
  87. // TODO Auto-generated method stub
  88. return memberDao.selectUserIntegralByWechatProxyId(page);
  89. }
  90. @Override
  91. public Member selectUserIdentityAndQrcodeByOpenId(String openid) {
  92. // TODO Auto-generated method stub
  93. return memberDao.selectUserIdentityAndQrcodeByOpenId(openid);
  94. }
  95. @Override
  96. public Member selectUserResAndIdSByOpenId(String openid) {
  97. // TODO Auto-generated method stub
  98. return memberDao.selectUserResAndIdSByOpenId(openid);
  99. }
  100. /**
  101. * 根据 openid 修改用户可用金额
  102. * 2016年5月4日
  103. * @param member
  104. * @return
  105. */
  106. public Integer updateUserIncomeByOpenId(Member member){
  107. return memberDao.updateUserIncomeByOpenId(member);
  108. }
  109. @Override
  110. public boolean updateUserFlagByOpenId(String openId) {
  111. // TODO Auto-generated method stub
  112. return memberDao.updateUserFlagByOpenId(openId) >= 1 ? true : false;
  113. }
  114. /**
  115. * 根据userid获取当前用户的“下线人数”和“已购买人数”
  116. * 2016年5月11日
  117. * @return
  118. */
  119. public List<Integer> selectDownCountByUserId(Integer userId){
  120. return memberDao.selectDownCountByUserId(userId);
  121. }
  122. @Override
  123. public boolean buildChildUser(String shareOpenid, Member member,int userType,int orderType) {
  124. // TODO Auto-generated method stub
  125. if(StringUtils.isEmpty(shareOpenid) || member == null){ return false;}
  126. //用户点击自己分享的链接则不绑定
  127. if(shareOpenid.equals(member.getUserOpenid())){return false;}
  128. //绑定关系
  129. if(userType == 1){
  130. //绑定为微代理下线
  131. return bulidUser(member.getUserOpenid(), shareOpenid, 1, orderType);
  132. }else if(userType == 2){
  133. //需过滤可以发展下线的角色
  134. PlaceInfo placeInfo = placeInfoMapper.getOnePlaceInfo2(shareOpenid);
  135. //内容格式:商户层可以绑定关系的角色id:41,42 41 42 分别为可以绑定关系的角色id
  136. String str = systemDao.selectOneShopRuleById(121).getRuleDesc();
  137. String rolesStr = str.split(":")[1];
  138. String[] roleArr = rolesStr.split(",");
  139. if(placeInfo != null &&
  140. Arrays.asList(roleArr).contains(Integer.toString(placeInfo.getRoleId()))){
  141. //改商户存在并且为可以绑定关系的就是 则绑定为其下线
  142. return bulidUser(member.getUserOpenid(), placeInfo.getId(), 2, orderType);
  143. }else{
  144. return false;
  145. }
  146. }else{
  147. return false;
  148. }
  149. }
  150. /**
  151. * 为某个用户绑定关系
  152. * @param nowUserOpenId 当前用户openid
  153. * @param parent 父类ID,如果type=1,此ID为openid(字符串),如果为2,此为代理商ID(数值)
  154. * @param type type = 1 : 属于微代理;type=2:属于代理商
  155. * @return true : 绑定成功, false:绑定失败
  156. */
  157. private boolean bulidUser(String nowUserOpenId, Object parent, Integer type, int orderType) {
  158. // TODO Auto-generated method stub
  159. Member member = homeServiceDao.selectMemberInfoByOpenId(nowUserOpenId);
  160. if (!checkUserRelation(nowUserOpenId, member)) { //当前用户不可以绑定关系 则返回
  161. return false;
  162. }
  163. // 绑定类型
  164. if (type.intValue() == 1) { //微代理:parent:为openid
  165. if (parent.toString().equals(nowUserOpenId)) {//会员自己不能成为自己会员的下线
  166. return false;
  167. }
  168. //上级用户信息
  169. Member parentInfo = homeServiceDao.selectMemberInfoByOpenId(parent.toString());
  170. //只有购买商品时才判断用户是否发生过购买,租赁的不需要判断
  171. if (orderType == 1) {
  172. boolean isFlag = ShopUtil.isFlag(parentInfo); //分享人可否发展下线
  173. if(!isFlag){return false;}
  174. }
  175. if(member != null && member.getUserIsFlag() != null){
  176. //判断是否已经终身绑定,如果等于2表示已经终身绑定,不在往后执行
  177. if(member.getUserIsFlag() == 2){
  178. return false;
  179. }
  180. member.setUserResType(2);
  181. if(parentInfo.getTemplateId() != null){
  182. member.setTemplateId(parentInfo.getTemplateId());
  183. }
  184. if(parentInfo.getUserDealers() != null){
  185. member.setUserDealers(parentInfo.getUserDealers());
  186. }
  187. }
  188. Integer i = homeServiceDao.updateUserResAndTypeByOpenid(member); // 更新
  189. boolean flag = wdRelationDao.insertWdrelation(parentInfo, member);//插入微代理层关系
  190. if(i.intValue() > 0 && flag){
  191. log.info(this,"--用户-->>" + member.getUserOpenid() + "<<--成为用户-->>"
  192. + parentInfo.getUserOpenid() + "<<--下线");
  193. return true;
  194. }
  195. } else if (type.intValue() == 2) { //代理商:parent:为代理商ID
  196. Matcher match = StaticInfo.pattern.matcher(parent.toString());
  197. if(!match.find()) {
  198. return false;
  199. }
  200. PlaceInfo info = placeInfoMapper.selectPlaceInfobyId(Integer.parseInt(parent.toString()));
  201. if (info == null || nowUserOpenId.equals(info.getOpenid())) {//会员自己不能成为自己商户的下线
  202. return false;
  203. }
  204. int gloadId = systemDao.selectOneShopRuleById(206).getRuleNum().intValue();
  205. if (gloadId == info.getId()) {
  206. return false;
  207. }
  208. if(info.getTemplateId() != 0){
  209. member.setTemplateId(info.getTemplateId());
  210. }
  211. if(info.getPlaceIds() != null){
  212. member.setUserDealers(info.getPlaceIds()); // bilud商户层关系
  213. }
  214. member.setUserResType(3);
  215. Integer i = homeServiceDao.updateUserResAndTypeByOpenid(member); // 更新
  216. // 修改微带表状态
  217. wdRelationDao.updateStatus(member.getUserOpenid());
  218. if(i > 0){
  219. return true;
  220. }
  221. }
  222. return false;
  223. }
  224. /**
  225. * 校验当前用户是否可以绑定关系
  226. * true:更新用户绑定信息 false:不能更新用户绑定信息
  227. * 2016年11月16日
  228. * mzx
  229. * @param member
  230. * @return
  231. */
  232. private boolean checkUserRelation(String nowUserOpenId, Member member){
  233. boolean flag = false;
  234. if (member != null && member.getUserId() != null) {
  235. //当关注时、点击别人链接时都会覆盖原油的绑定关系,当用户购买商品后userisflag变为2并且不在被覆盖
  236. if (member.getUserIsFlag() != null && member.getUserIsFlag().intValue() == 1) {
  237. return true;
  238. }
  239. } else {
  240. // 如果用户不存在,添加用户信息(openid、未关注、性别未知)
  241. member = new Member();
  242. member.setUserStatus(1); // 未关注
  243. member.setUserSex(0);
  244. member.setUserOpenid(nowUserOpenId);
  245. homeServiceDao.insertMemberInfo(member);
  246. flag = true; // 更新
  247. }
  248. return flag;
  249. }
  250. @Override
  251. public Map<String, Object> getDownInfoAndBuyedCount(Page page) {
  252. List<Member> list = memberDao.selectUserIntegralByWechatProxyId(page);
  253. List<Integer> countList = memberDao.selectDownCountByUserId(page.getTotalRecord()); //page.getTotalRecord 用户userid
  254. int downNum = 0; //下线人数
  255. int buyedNum = 0; //已购买人数
  256. if(countList.size() == 2){
  257. downNum = countList.get(0);
  258. buyedNum = countList.get(1);
  259. }
  260. Map<String, Object> map = new HashMap<String, Object>();
  261. map.put("downNum", downNum);
  262. map.put("buyedNum", buyedNum);
  263. if(list.size()>0){
  264. map.put("beginNo", list.get(0).getUserId());
  265. map.put("endNo", list.get(list.size()-1).getUserId());
  266. }
  267. map.put("list", list);
  268. return map;
  269. }
  270. @Override
  271. public boolean updateIsBaughtByOpenid(String openid, int userIsBaught) {
  272. // TODO Auto-generated method stub
  273. if(StringUtils.isEmpty(openid)){ return false; }
  274. Member member = memberDao.getMemberByUserOpenId(openid);
  275. if(member == null){ return false; }
  276. Integer i = 0;
  277. //若当前状态已经是要修改的状态 则不修改
  278. if(member.getUserIsBought() != null && member.getUserIsBought().intValue() != userIsBaught){
  279. member.setUserIsBought(userIsBaught);
  280. i = memberDao.updateIsBaughtByOpenid(member);
  281. }
  282. if(i != null && i.intValue() > 0){
  283. return true;
  284. }else{
  285. return false;
  286. }
  287. }
  288. /**
  289. * 获取个人分销员的下线列表数
  290. */
  291. public int getOrdinaryNumber(Member member){
  292. return memberDao.getOrdinaryNumber(member);
  293. }
  294. /**
  295. *后台-Drp分销管理主界面 --> 获取公司分销员的下线列表
  296. */
  297. public List<Member> getOrdinary(Member member){
  298. return memberDao.getOrdinary(member);
  299. }
  300. /**
  301. * 获取我的会员信息
  302. * @return
  303. */
  304. public Member getMyMemberInfo(String openId){
  305. Member member=memberDao.getMyMemberInfo(openId);
  306. return member;
  307. }
  308. @Override
  309. public Integer updateMyMember(Member member) {
  310. return memberDao.updateMyMember(member);
  311. }
  312. @Override
  313. public Integer updateUserStayIntegralByOpenId(Member member) {
  314. return memberDao.updateUserStayIntegralByOpenId(member);
  315. }
  316. }