123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395 |
- package com.fuint.module.clientApi.controller;
- import com.alibaba.fastjson.JSONObject;
- import com.fuint.common.dto.AssetDto;
- import com.fuint.common.dto.UserDto;
- import com.fuint.common.dto.UserInfo;
- import com.fuint.common.enums.*;
- import com.fuint.common.service.*;
- import com.fuint.common.util.*;
- import com.fuint.framework.exception.BusinessCheckException;
- import com.fuint.framework.web.BaseController;
- import com.fuint.framework.web.ResponseObject;
- import com.fuint.repository.model.*;
- import com.fuint.utils.StringUtil;
- import io.swagger.annotations.Api;
- import io.swagger.annotations.ApiOperation;
- import lombok.AllArgsConstructor;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.beans.BeanUtils;
- import org.springframework.web.bind.annotation.*;
- import javax.servlet.http.HttpServletRequest;
- import java.io.ByteArrayOutputStream;
- import java.util.Arrays;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- /**
- * 会员类controller
- *
- * Created by FSQ
- * CopyRight https://www.fuint.cn
- */
- @Api(tags="会员端-会员相关接口")
- @RestController
- @AllArgsConstructor
- @RequestMapping(value = "/clientApi/user")
- public class ClientUserController extends BaseController {
- private static final Logger logger = LoggerFactory.getLogger(ClientUserController.class);
- /**
- * 会员服务接口
- * */
- private MemberService memberService;
- /**
- * 会员卡券服务接口
- * */
- private UserCouponService userCouponService;
- /**
- * 员工服务接口
- * */
- private StaffService staffService;
- /**
- * 卡券服务接口
- * */
- private CouponService couponService;
- /**
- * 会员等级服务接口
- **/
- private UserGradeService userGradeService;
- /**
- * 系统配置服务接口
- * */
- private SettingService settingService;
- /**
- * 微信服务接口
- * */
- private WeixinService weixinService;
- /**
- * 商户服务接口
- */
- private MerchantService merchantService;
- /**
- * 验证码接口
- */
- private VerifyCodeService verifyCodeService;
- /**
- * 获取会员信息
- */
- @ApiOperation(value = "获取会员信息")
- @RequestMapping(value = "/info", method = RequestMethod.GET)
- @CrossOrigin
- public ResponseObject info(HttpServletRequest request) throws BusinessCheckException {
- String token = request.getHeader("Access-Token");
- String merchantNo = request.getHeader("merchantNo") == null ? "" : request.getHeader("merchantNo");
- String isWechat = request.getHeader("isWechat") == null ? YesOrNoEnum.NO.getKey() : request.getHeader("isWechat");
- String platform = request.getHeader("platform") == null ? "" : request.getHeader("platform");
- String userNo = request.getParameter("code") == null ? "" : request.getParameter("code");
- UserInfo loginInfo = TokenUtil.getUserInfoByToken(token);
- Integer merchantId = merchantService.getMerchantId(merchantNo);
- MtUser mtUser = null;
- if (loginInfo != null) {
- mtUser = memberService.queryMemberById(loginInfo.getId());
- }
- if (StringUtil.isNotEmpty(userNo)) {
- mtUser = memberService.queryMemberByUserNo(merchantId, userNo);
- }
- MtUserGrade gradeInfo = null;
- if (mtUser != null) {
- gradeInfo = memberService.queryMemberGradeByGradeId(Integer.parseInt(mtUser.getGradeId()));
- }
- List<MtUserGrade> memberGrade = userGradeService.getPayUserGradeList(merchantId, mtUser);
- Map<String, Object> outParams = new HashMap<>();
- UserDto userInfo = null;
- if (mtUser != null) {
- userInfo = new UserDto();
- BeanUtils.copyProperties(mtUser, userInfo);
- if (StringUtil.isNotEmpty(mtUser.getPassword())) {
- userInfo.setHasPassword(YesOrNoEnum.YES.getKey());
- } else {
- userInfo.setHasPassword(YesOrNoEnum.NO.getKey());
- }
- }
- outParams.put("userInfo", userInfo);
- outParams.put("gradeInfo", gradeInfo);
- outParams.put("memberGrade", memberGrade);
- // 会员到期时间
- String gradeEndTime = "";
- if (mtUser != null) {
- if (mtUser.getEndTime() != null) {
- gradeEndTime = DateUtil.formatDate(mtUser.getEndTime(), "yyyy.MM.dd HH:mm");
- }
- }
- outParams.put("gradeEndTime", gradeEndTime);
- // 是否店铺员工
- boolean isMerchant = false;
- if (mtUser != null) {
- if (mtUser.getMobile() != null && StringUtil.isNotEmpty(mtUser.getMobile())) {
- MtStaff staffInfo = staffService.queryStaffByMobile(mtUser.getMobile());
- if (staffInfo != null && staffInfo.getAuditedStatus().equals(StatusEnum.ENABLED.getKey())) {
- isMerchant = true;
- }
- }
- }
- // 是否开通微信会员卡
- boolean openWxCard = false;
- if (platform.equals(PlatformTypeEnum.H5.getCode()) && isWechat.equals(YesOrNoEnum.YES.getKey()) && mtUser != null && StringUtil.isNotEmpty(mtUser.getOpenId())) {
- MtSetting cardSetting = settingService.querySettingByName(mtUser.getMerchantId(), SettingTypeEnum.USER.getKey(), UserSettingEnum.OPEN_WX_CARD.getKey());
- if (cardSetting != null && cardSetting.getValue().equals(YesOrNoEnum.TRUE.getKey())) {
- MtSetting cardIdSetting = settingService.querySettingByName(mtUser.getMerchantId(), SettingTypeEnum.USER.getKey(), UserSettingEnum.WX_MEMBER_CARD_ID.getKey());
- if (cardIdSetting != null) {
- Boolean isOpen = weixinService.isOpenCard(mtUser.getMerchantId(), cardIdSetting.getValue(), mtUser.getOpenId());
- logger.info("weixinService.isOpenCard userId = {},isOpen = {}", mtUser.getId(), isOpen);
- if (!isOpen) {
- openWxCard = true;
- }
- }
- }
- }
- outParams.put("isMerchant", isMerchant);
- outParams.put("openWxCard", openWxCard);
- return getSuccessResult(outParams);
- }
- /**
- * 获取会员资产数据
- */
- @ApiOperation(value = "获取会员资产数据")
- @RequestMapping(value = "/asset", method = RequestMethod.GET)
- @CrossOrigin
- public ResponseObject asset(HttpServletRequest request) throws BusinessCheckException {
- String token = request.getHeader("Access-Token");
- String userId = request.getParameter("userId");
- UserInfo mtUser = TokenUtil.getUserInfoByToken(token);
- if (StringUtil.isNotEmpty(userId)) {
- MtUser userInfo = memberService.queryMemberById(Integer.parseInt(userId));
- if (userInfo != null) {
- mtUser.setId(userInfo.getId());
- }
- }
- Integer couponNum = 0;
- Integer preStoreNum = 0;
- Integer timerNum = 0;
- if (mtUser != null) {
- List<String> statusList = Arrays.asList(UserCouponStatusEnum.UNUSED.getKey());
- List<MtUserCoupon> dataList = userCouponService.getUserCouponList(mtUser.getId(), statusList);
- for (int i = 0; i < dataList.size(); i++) {
- MtCoupon couponInfo = couponService.queryCouponById(dataList.get(i).getCouponId());
- boolean isEffective = couponService.isCouponEffective(couponInfo, dataList.get(i));
- if (!isEffective) {
- continue;
- }
- if (dataList.get(i).getType().equals(CouponTypeEnum.COUPON.getKey())) {
- couponNum++;
- }
- if (dataList.get(i).getType().equals(CouponTypeEnum.PRESTORE.getKey())) {
- preStoreNum++;
- }
- if (dataList.get(i).getType().equals(CouponTypeEnum.TIMER.getKey())) {
- timerNum++;
- }
- }
- }
- AssetDto asset = new AssetDto();
- asset.setCoupon(couponNum);
- asset.setPrestore(preStoreNum);
- asset.setTimer(timerNum);
- Map<String, Object> outParams = new HashMap<>();
- outParams.put("asset", asset);
- return getSuccessResult(outParams);
- }
- /**
- * 获取会员设置
- */
- @ApiOperation(value = "获取会员设置")
- @RequestMapping(value = "/setting", method = RequestMethod.GET)
- @CrossOrigin
- public ResponseObject setting(HttpServletRequest request) throws BusinessCheckException {
- String merchantNo = request.getHeader("merchantNo");
- Map<String, Object> outParams = new HashMap<>();
- Integer merchantId = merchantService.getMerchantId(merchantNo);
- List<MtSetting> settingList = settingService.getSettingList(merchantId, SettingTypeEnum.USER.getKey());
- for (MtSetting setting : settingList) {
- if (setting.getName().equals(UserSettingEnum.GET_COUPON_NEED_PHONE.getKey())) {
- outParams.put(UserSettingEnum.GET_COUPON_NEED_PHONE.getKey(), setting.getValue());
- } else if (setting.getName().equals(UserSettingEnum.SUBMIT_ORDER_NEED_PHONE.getKey())) {
- outParams.put(UserSettingEnum.SUBMIT_ORDER_NEED_PHONE.getKey(), setting.getValue());
- } else if (setting.getName().equals(UserSettingEnum.LOGIN_NEED_PHONE.getKey())) {
- outParams.put(UserSettingEnum.LOGIN_NEED_PHONE.getKey(), setting.getValue());
- }
- }
- return getSuccessResult(outParams);
- }
- /**
- * 保存会员信息
- */
- @ApiOperation(value = "保存会员信息")
- @RequestMapping(value = "/saveInfo", method = RequestMethod.POST)
- @CrossOrigin
- public ResponseObject saveInfo(HttpServletRequest request, @RequestBody Map<String, Object> param) throws BusinessCheckException {
- String token = request.getHeader("Access-Token");
- String merchantNo = request.getHeader("merchantNo") == null ? "" : request.getHeader("merchantNo");
- String name = param.get("name") == null ? "" : param.get("name").toString();
- String birthday = param.get("birthday") == null ? "" : param.get("birthday").toString();
- String avatar = param.get("avatar") == null ? "" : param.get("avatar").toString();
- Integer sex = param.get("sex") == null ? 1 : Integer.parseInt(param.get("sex").toString());
- String code = param.get("code") == null ? "" : param.get("code").toString();
- String password = param.get("password") == null ? "" : param.get("password").toString();
- String passwordOld = param.get("passwordOld") == null ? "" : param.get("passwordOld").toString();
- String phone = param.get("mobile") == null ? "" : param.get("mobile").toString();
- String verifyCode = param.get("verifyCode") == null ? "" : param.get("verifyCode").toString();
- String mobile = "";
- Integer merchantId = merchantService.getMerchantId(merchantNo);
- UserInfo userInfo = TokenUtil.getUserInfoByToken(token);
- boolean modifyPassword = false;
- if (userInfo == null) {
- return getFailureResult(1001);
- }
- // 通过短信验证码修改手机号
- if (StringUtil.isNotEmpty(phone) && StringUtil.isNotEmpty(verifyCode)) {
- MtVerifyCode mtVerifyCode = verifyCodeService.checkVerifyCode(phone, verifyCode);
- if (mtVerifyCode != null) {
- mobile = phone;
- } else {
- return getFailureResult(3002);
- }
- }
- // 小程序获取手机号
- if (StringUtil.isNotEmpty(code)) {
- JSONObject loginInfo = weixinService.getWxProfile(merchantId, code);
- if (loginInfo != null) {
- mobile = weixinService.getPhoneNumber(param.get("encryptedData").toString(), loginInfo.get("session_key").toString(), param.get("iv").toString());
- }
- }
- MtUser mtUser = memberService.queryMemberById(userInfo.getId());
- if (StringUtil.isNotEmpty(name)) {
- mtUser.setName(name);
- }
- if (StringUtil.isNotEmpty(password)) {
- if (StringUtil.isNotEmpty(passwordOld) && StringUtil.isNotEmpty(mtUser.getSalt())) {
- String pass = memberService.deCodePassword(passwordOld, mtUser.getSalt());
- if (!pass.equals(mtUser.getPassword())) {
- return getFailureResult(201, "旧密码输入有误");
- }
- }
- mtUser.setPassword(password);
- modifyPassword = true;
- }
- if (sex.equals(1) || sex.equals(0) || sex.equals(2)) {
- mtUser.setSex(sex);
- }
- if (StringUtil.isNotEmpty(birthday)) {
- mtUser.setBirthday(birthday);
- }
- if (StringUtil.isNotEmpty(mobile)) {
- mtUser.setMobile(mobile);
- }
- if (StringUtil.isNotEmpty(avatar)) {
- mtUser.setAvatar(avatar);
- }
- MtUser result = memberService.updateMember(mtUser, modifyPassword);
- return getSuccessResult(result);
- }
- /**
- * 设置会员的默认店铺
- */
- @ApiOperation(value = "设置会员的默认店铺")
- @RequestMapping(value = "/defaultStore", method = RequestMethod.GET)
- @CrossOrigin
- public ResponseObject defaultStore(HttpServletRequest request) throws BusinessCheckException {
- Integer storeId = request.getParameter("storeId") == null ? 0 : Integer.parseInt(request.getParameter("storeId"));
- String token = request.getHeader("Access-Token");
- UserInfo userInfo = TokenUtil.getUserInfoByToken(token);
- if (userInfo != null && storeId > 0) {
- MtUser mtUser = memberService.queryMemberById(userInfo.getId());
- memberService.updateMember(mtUser, false);
- }
- Map<String, Object> outParams = new HashMap<>();
- return getSuccessResult(outParams);
- }
- /**
- * 获取会员二维码
- * */
- @ApiOperation(value = "获取会员二维码")
- @RequestMapping(value = "/qrCode", method = RequestMethod.GET)
- @CrossOrigin
- public ResponseObject qrCode(HttpServletRequest request) throws BusinessCheckException {
- String token = request.getHeader("Access-Token");
- UserInfo loginInfo = TokenUtil.getUserInfoByToken(token);
- if (loginInfo == null) {
- return getFailureResult(1001);
- }
- MtUser mtUser = memberService.queryMemberById(loginInfo.getId());
- String qrCode = "";
- try {
- // 生成并输出二维码
- ByteArrayOutputStream out = new ByteArrayOutputStream();
- String content = mtUser.getUserNo();
- QRCodeUtil.createQrCode(out, content, 800, 800, "png", "");
- // 对数据进行Base64编码
- qrCode = new String(Base64Util.baseEncode(out.toByteArray()), "UTF-8");
- qrCode = "data:image/jpg;base64," + qrCode;
- } catch (Exception e) {
- logger.error(e.getMessage(), e);
- }
- // 微信会员卡领取二维码
- String wxCardQrCode = "";
- MtSetting cardIdSetting = settingService.querySettingByName(mtUser.getMerchantId(), SettingTypeEnum.USER.getKey(), UserSettingEnum.WX_MEMBER_CARD_ID.getKey());
- if (cardIdSetting != null) {
- wxCardQrCode = weixinService.createCardQrCode(mtUser.getMerchantId(), cardIdSetting.getValue(), mtUser.getUserNo());
- }
- Map<String, Object> outParams = new HashMap<>();
- outParams.put("qrCode", qrCode);
- outParams.put("userInfo", mtUser);
- outParams.put("wxCardQrCode", wxCardQrCode);
- return getSuccessResult(outParams);
- }
- }
|