MemberServiceImpl.java 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459
  1. package com.iamberry.wechat.service.member;
  2. import com.github.pagehelper.PageHelper;
  3. import com.iamberry.app.tool.log.RatFWLogger;
  4. import com.iamberry.wechat.core.entity.Page;
  5. import com.iamberry.wechat.core.entity.drp.PlaceInfo;
  6. import com.iamberry.wechat.core.entity.integral.RankRule;
  7. import com.iamberry.wechat.core.entity.integral.UseIntegral;
  8. import com.iamberry.wechat.core.entity.member.Member;
  9. import com.iamberry.wechat.core.entity.page.PageRequest;
  10. import com.iamberry.wechat.core.entity.page.PagedResult;
  11. import com.iamberry.wechat.face.member.MemberService;
  12. import com.iamberry.wechat.service.ShopUtil;
  13. import com.iamberry.wechat.service.home.dao.HomeServiceDao;
  14. import com.iamberry.wechat.service.mapper.PlaceInfoMapper;
  15. import com.iamberry.wechat.service.mapper.UseIntegralMapper;
  16. import com.iamberry.wechat.service.member.dao.MemberDao;
  17. import com.iamberry.wechat.service.relationship.Dao.WdRelationDao;
  18. import com.iamberry.wechat.service.system.dao.SystemDao;
  19. import com.iamberry.wechat.tools.StaticInfo;
  20. import org.apache.commons.lang.StringUtils;
  21. import org.omg.CORBA.PUBLIC_MEMBER;
  22. import org.springframework.beans.factory.annotation.Autowired;
  23. import org.springframework.stereotype.Service;
  24. import org.springframework.transaction.annotation.Transactional;
  25. import util.PageUtil;
  26. import java.util.Arrays;
  27. import java.util.HashMap;
  28. import java.util.List;
  29. import java.util.Map;
  30. import java.util.regex.Matcher;
  31. /**
  32. * 会员信息 service 实现
  33. * 2016年4月21日
  34. * @author Administrator
  35. *
  36. */
  37. @Service
  38. public class MemberServiceImpl implements MemberService {
  39. @Autowired
  40. private MemberDao memberDao;
  41. @Autowired
  42. private PlaceInfoMapper placeInfoMapper;
  43. @Autowired
  44. public SystemDao systemDao;
  45. @Autowired
  46. private HomeServiceDao homeServiceDao;
  47. @Autowired
  48. private WdRelationDao wdRelationDao;
  49. @Autowired
  50. private UseIntegralMapper useIntegralMapper;
  51. @Autowired
  52. private MemberService memberService;
  53. @Autowired
  54. private RatFWLogger log;
  55. /**
  56. * 根据userid得到会员信息
  57. * @param userId
  58. * @return
  59. */
  60. @Override
  61. public Member getMemberByUserId(Integer userId) {
  62. // TODO Auto-generated method stub
  63. return memberDao.getMemberByUserId(userId);
  64. }
  65. /**
  66. * 根据 openid 查询一个member
  67. * 2016年4月28日
  68. * @author 穆再兴
  69. * @return
  70. */
  71. public Member getMemberByUserOpenId(String openid){
  72. return memberDao.getMemberByUserOpenId(openid);
  73. }
  74. @Override
  75. public Integer getCount() {
  76. return memberDao.getCount();
  77. }
  78. @Override
  79. public List<Member> getMemberByPage(Page page) {
  80. return memberDao.getMemberByPage(page);
  81. }
  82. /**
  83. * 根据 userid 修改会员信息
  84. * 2016年4月21日
  85. * @author 穆再兴
  86. * @return
  87. */
  88. @Override
  89. public Integer updateMemberByUserId(Member member){
  90. return memberDao.updateMemberByUserId(member);
  91. }
  92. @Override
  93. public Integer updateUserUseIntegral(Member member) {
  94. // TODO Auto-generated method stub
  95. return memberDao.updateUserUseIntegral(member);
  96. }
  97. @Override
  98. public List<Member> selectUserIntegralByWechatProxyId(Page page) {
  99. // TODO Auto-generated method stub
  100. return memberDao.selectUserIntegralByWechatProxyId(page);
  101. }
  102. @Override
  103. public Member selectUserIdentityAndQrcodeByOpenId(String openid) {
  104. // TODO Auto-generated method stub
  105. return memberDao.selectUserIdentityAndQrcodeByOpenId(openid);
  106. }
  107. @Override
  108. public Member selectUserResAndIdSByOpenId(String openid) {
  109. // TODO Auto-generated method stub
  110. return memberDao.selectUserResAndIdSByOpenId(openid);
  111. }
  112. /**
  113. * 根据 openid 修改用户可用金额
  114. * 2016年5月4日
  115. * @param member
  116. * @return
  117. */
  118. public Integer updateUserIncomeByOpenId(Member member){
  119. return memberDao.updateUserIncomeByOpenId(member);
  120. }
  121. @Override
  122. public boolean updateUserFlagByOpenId(String openId) {
  123. // TODO Auto-generated method stub
  124. return memberDao.updateUserFlagByOpenId(openId) >= 1 ? true : false;
  125. }
  126. /**
  127. * 根据userid获取当前用户的“下线人数”和“已购买人数”
  128. * 2016年5月11日
  129. * @return
  130. */
  131. public List<Integer> selectDownCountByUserId(Integer userId){
  132. return memberDao.selectDownCountByUserId(userId);
  133. }
  134. @Override
  135. public boolean buildChildUser(String shareOpenid, Member member,int userType,int orderType) {
  136. // TODO Auto-generated method stub
  137. if(StringUtils.isEmpty(shareOpenid) || member == null){ return false;}
  138. //用户点击自己分享的链接则不绑定
  139. if(shareOpenid.equals(member.getUserOpenid())){return false;}
  140. //绑定关系
  141. if(userType == 1){
  142. //绑定为微代理下线
  143. return bulidUser(member.getUserOpenid(), shareOpenid, 1, orderType);
  144. }else if(userType == 2){
  145. //需过滤可以发展下线的角色
  146. PlaceInfo placeInfo = placeInfoMapper.getOnePlaceInfo2(shareOpenid);
  147. //内容格式:商户层可以绑定关系的角色id:41,42 41 42 分别为可以绑定关系的角色id
  148. String str = systemDao.selectOneShopRuleById(121).getRuleDesc();
  149. String rolesStr = str.split(":")[1];
  150. String[] roleArr = rolesStr.split(",");
  151. if(placeInfo != null &&
  152. Arrays.asList(roleArr).contains(Integer.toString(placeInfo.getRoleId()))){
  153. //改商户存在并且为可以绑定关系的就是 则绑定为其下线
  154. return bulidUser(member.getUserOpenid(), placeInfo.getId(), 2, orderType);
  155. }else{
  156. return false;
  157. }
  158. }else{
  159. return false;
  160. }
  161. }
  162. /**
  163. * 为某个用户绑定关系
  164. * @param nowUserOpenId 当前用户openid
  165. * @param parent 父类ID,如果type=1,此ID为openid(字符串),如果为2,此为代理商ID(数值)
  166. * @param type type = 1 : 属于微代理;type=2:属于代理商
  167. * @return true : 绑定成功, false:绑定失败
  168. */
  169. private boolean bulidUser(String nowUserOpenId, Object parent, Integer type, int orderType) {
  170. // TODO Auto-generated method stub
  171. Member member = homeServiceDao.selectMemberInfoByOpenId(nowUserOpenId);
  172. if (!checkUserRelation(nowUserOpenId, member)) { //当前用户不可以绑定关系 则返回
  173. return false;
  174. }
  175. // 绑定类型
  176. if (type.intValue() == 1) { //微代理:parent:为openid
  177. if (parent.toString().equals(nowUserOpenId)) {//会员自己不能成为自己会员的下线
  178. return false;
  179. }
  180. //上级用户信息
  181. Member parentInfo = homeServiceDao.selectMemberInfoByOpenId(parent.toString());
  182. //只有购买商品时才判断用户是否发生过购买,租赁的不需要判断
  183. if (orderType == 1) {
  184. boolean isFlag = ShopUtil.isFlag(parentInfo); //分享人可否发展下线
  185. if(!isFlag){return false;}
  186. }
  187. if(member != null && member.getUserIsFlag() != null){
  188. //判断是否已经终身绑定,如果等于2表示已经终身绑定,不在往后执行
  189. if(member.getUserIsFlag() == 2){
  190. return false;
  191. }
  192. member.setUserResType(2);
  193. if(parentInfo.getTemplateId() != null){
  194. member.setTemplateId(parentInfo.getTemplateId());
  195. }
  196. if(parentInfo.getUserDealers() != null){
  197. member.setUserDealers(parentInfo.getUserDealers());
  198. }
  199. }
  200. Integer i = homeServiceDao.updateUserResAndTypeByOpenid(member); // 更新
  201. boolean flag = wdRelationDao.insertWdrelation(parentInfo, member);//插入微代理层关系
  202. if(i.intValue() > 0 && flag){
  203. log.info(this,"--用户-->>" + member.getUserOpenid() + "<<--成为用户-->>"
  204. + parentInfo.getUserOpenid() + "<<--下线");
  205. return true;
  206. }
  207. } else if (type.intValue() == 2) { //代理商:parent:为代理商ID
  208. Matcher match = StaticInfo.pattern.matcher(parent.toString());
  209. if(!match.find()) {
  210. return false;
  211. }
  212. PlaceInfo info = placeInfoMapper.selectPlaceInfobyId(Integer.parseInt(parent.toString()));
  213. if (info == null || nowUserOpenId.equals(info.getOpenid())) {//会员自己不能成为自己商户的下线
  214. return false;
  215. }
  216. int gloadId = systemDao.selectOneShopRuleById(206).getRuleNum().intValue();
  217. if (gloadId == info.getId()) {
  218. return false;
  219. }
  220. if(info.getTemplateId() != 0){
  221. member.setTemplateId(info.getTemplateId());
  222. }
  223. if(info.getPlaceIds() != null){
  224. member.setUserDealers(info.getPlaceIds()); // bilud商户层关系
  225. }
  226. member.setUserResType(3);
  227. Integer i = homeServiceDao.updateUserResAndTypeByOpenid(member); // 更新
  228. // 修改微带表状态
  229. wdRelationDao.updateStatus(member.getUserOpenid());
  230. if(i > 0){
  231. return true;
  232. }
  233. }
  234. return false;
  235. }
  236. /**
  237. * 校验当前用户是否可以绑定关系
  238. * true:更新用户绑定信息 false:不能更新用户绑定信息
  239. * 2016年11月16日
  240. * mzx
  241. * @param member
  242. * @return
  243. */
  244. private boolean checkUserRelation(String nowUserOpenId, Member member){
  245. boolean flag = false;
  246. if (member != null && member.getUserId() != null) {
  247. //当关注时、点击别人链接时都会覆盖原油的绑定关系,当用户购买商品后userisflag变为2并且不在被覆盖
  248. if (member.getUserIsFlag() != null && member.getUserIsFlag().intValue() == 1) {
  249. return true;
  250. }
  251. } else {
  252. // 如果用户不存在,添加用户信息(openid、未关注、性别未知)
  253. member = new Member();
  254. member.setUserStatus(1); // 未关注
  255. member.setUserSex(0);
  256. member.setUserOpenid(nowUserOpenId);
  257. homeServiceDao.insertMemberInfo(member);
  258. flag = true; // 更新
  259. }
  260. return flag;
  261. }
  262. @Override
  263. public Map<String, Object> getDownInfoAndBuyedCount(Page page) {
  264. List<Member> list = memberDao.selectUserIntegralByWechatProxyId(page);
  265. List<Integer> countList = memberDao.selectDownCountByUserId(page.getTotalRecord()); //page.getTotalRecord 用户userid
  266. int downNum = 0; //下线人数
  267. int buyedNum = 0; //已购买人数
  268. if(countList.size() == 2){
  269. downNum = countList.get(0);
  270. buyedNum = countList.get(1);
  271. }
  272. Map<String, Object> map = new HashMap<String, Object>();
  273. map.put("downNum", downNum);
  274. map.put("buyedNum", buyedNum);
  275. if(list.size()>0){
  276. map.put("beginNo", list.get(0).getUserId());
  277. map.put("endNo", list.get(list.size()-1).getUserId());
  278. }
  279. map.put("list", list);
  280. return map;
  281. }
  282. @Override
  283. public boolean updateIsBaughtByOpenid(String openid, int userIsBaught) {
  284. // TODO Auto-generated method stub
  285. if(StringUtils.isEmpty(openid)){ return false; }
  286. Member member = memberDao.getMemberByUserOpenId(openid);
  287. if(member == null){ return false; }
  288. Integer i = 0;
  289. //若当前状态已经是要修改的状态 则不修改
  290. if(member.getUserIsBought() != null && member.getUserIsBought().intValue() != userIsBaught){
  291. member.setUserIsBought(userIsBaught);
  292. i = memberDao.updateIsBaughtByOpenid(member);
  293. }
  294. if(i != null && i.intValue() > 0){
  295. return true;
  296. }else{
  297. return false;
  298. }
  299. }
  300. /**
  301. * 获取个人分销员的下线列表数
  302. */
  303. public int getOrdinaryNumber(Member member){
  304. return memberDao.getOrdinaryNumber(member);
  305. }
  306. /**
  307. *后台-Drp分销管理主界面 --> 获取公司分销员的下线列表
  308. */
  309. public List<Member> getOrdinary(Member member){
  310. return memberDao.getOrdinary(member);
  311. }
  312. /**
  313. * 获取我的会员信息
  314. * @return
  315. */
  316. public Member getMyMemberInfo(String openId){
  317. Member member=memberDao.getMyMemberInfo(openId);
  318. return member;
  319. }
  320. @Override
  321. public Integer updateMyMember(Member member) {
  322. return memberDao.updateMyMember(member);
  323. }
  324. @Override
  325. public Integer updateUserStayIntegralByOpenId(Member member) {
  326. return memberDao.updateUserStayIntegralByOpenId(member);
  327. }
  328. @Override
  329. public Integer getRegisteredNumber() {
  330. return memberDao.getRegisteredNumber();
  331. }
  332. @Override
  333. public Integer getUserGrad(Integer userId) {
  334. Member member = memberDao.getMemberByUserId(userId);
  335. List<RankRule> rankRuleList = useIntegralMapper.listRankRule(new RankRule());
  336. try {
  337. RankRule rr = null;
  338. for (RankRule rankRule : rankRuleList) {
  339. if (member.getUserIntegral() > rankRule.getRankRuleIntegral()) {
  340. if (rr == null) {
  341. rr = rankRule;
  342. } else if (rr.getRankRuleIntegral() < rankRule.getRankRuleIntegral()) {
  343. rr = rankRule;
  344. }
  345. }
  346. }
  347. if (rr == null) {
  348. return null;
  349. } else {
  350. return rr.getRankRuleId();
  351. }
  352. }catch (Exception e){
  353. return null;
  354. }
  355. }
  356. @Override
  357. public List<Member> getBirthday(Member member) {
  358. return memberDao.getBirthday(member);
  359. }
  360. @Override
  361. @Transactional
  362. public Integer updaterIntegral(Integer userId,Integer type,Integer configId, Integer integral,String remake) {
  363. //type 1:增加积分 2:减少积
  364. Integer flag = 0;
  365. Member member = this.getMemberByUserId(userId);
  366. if(member == null ){
  367. return flag;
  368. }
  369. if(type == 1){
  370. if(integral > 0){
  371. Member m = new Member();
  372. m.setUserId(userId);
  373. m.setUserSurplusIntegral(member.getUserSurplusIntegral() + integral);
  374. m.setUserIntegral(member.getUserIntegral() + integral);
  375. flag = memberDao.update(m);
  376. if(flag < 1){
  377. throw new RuntimeException("增加积分失败");
  378. }
  379. UseIntegral useIntegral = new UseIntegral();
  380. useIntegral.setUserOpenId(member.getUserOpenid());
  381. useIntegral.setIntegralType(1);
  382. useIntegral.setConfigId(configId);
  383. useIntegral.setIntegralNumber(integral);
  384. useIntegral.setIntegralBeforeNumber(member.getUserSurplusIntegral());
  385. useIntegral.setIntegralEndNumber(member.getUserSurplusIntegral() + integral);
  386. useIntegral.setIntegralRemarks(remake);
  387. flag = useIntegralMapper.addUseIntegral(useIntegral);
  388. if(flag < 1){
  389. throw new RuntimeException("添加积分使用记录失败");
  390. }
  391. }
  392. }else if(type == 2){
  393. if(member.getUserSurplusIntegral() - integral > 0){
  394. Member m = new Member();
  395. m.setUserId(userId);
  396. m.setUserSurplusIntegral(member.getUserSurplusIntegral() - integral);
  397. m.setUserUseIntegral(member.getUserUseIntegral() + integral);
  398. flag = memberDao.update(m);
  399. if(flag < 1){
  400. throw new RuntimeException("删除积分失败");
  401. }
  402. UseIntegral useIntegral = new UseIntegral();
  403. useIntegral.setUserOpenId(member.getUserOpenid());
  404. useIntegral.setIntegralType(2);
  405. useIntegral.setConfigId(configId);
  406. useIntegral.setIntegralNumber(integral);
  407. useIntegral.setIntegralBeforeNumber(member.getUserSurplusIntegral());
  408. useIntegral.setIntegralEndNumber(member.getUserSurplusIntegral() - integral);
  409. useIntegral.setIntegralRemarks(remake);
  410. flag = useIntegralMapper.addUseIntegral(useIntegral);
  411. if(flag < 1){
  412. throw new RuntimeException("添加积分使用记录失败");
  413. }
  414. }
  415. }
  416. return flag;
  417. }
  418. @Override
  419. public PagedResult<Member> listMemberPage(PageRequest<Member> pageRequest) {
  420. PageHelper.startPage(pageRequest.getPageNO(), pageRequest.getPageSize(), pageRequest.isPageTotal());
  421. List<Member> detedctList = memberDao.listMemberPage(pageRequest.getData());
  422. return PageUtil.getPage(detedctList);
  423. }
  424. @Override
  425. public Integer nowUpdateUserByOpenId(Member member) {
  426. return memberDao.nowUpdateUserByOpenId(member);
  427. }
  428. }