ApiDevelopServiceImpl.java 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364
  1. package com.ydd.app.service.impl;
  2. import cn.hutool.core.lang.UUID;
  3. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  4. import com.ydd.app.dto.*;
  5. import com.ydd.app.service.*;
  6. import com.ydd.app.vo.OpenMyWalletVo;
  7. import com.ydd.module.dto.OpenCustomerDto;
  8. import com.ydd.app.vo.OpenMemberInfoVo;
  9. import com.ydd.common.constant.Constants;
  10. import com.ydd.common.core.domain.ResponseResult;
  11. import com.ydd.common.core.page.PageResult;
  12. import com.ydd.common.core.redis.RedisCache;
  13. import com.ydd.common.enums.ResponseResultCodeEnum;
  14. import com.ydd.common.utils.DateUtils;
  15. import com.ydd.common.utils.SnCodeUtils;
  16. import com.ydd.common.utils.sign.Md5Utils;
  17. import com.ydd.framework.web.service.TokenService;
  18. import com.ydd.module.domain.*;
  19. import com.ydd.module.enums.*;
  20. import com.ydd.module.service.*;
  21. import lombok.RequiredArgsConstructor;
  22. import lombok.extern.slf4j.Slf4j;
  23. import org.apache.commons.lang3.StringUtils;
  24. import org.springframework.beans.BeanUtils;
  25. import org.springframework.beans.factory.annotation.Autowired;
  26. import org.springframework.stereotype.Service;
  27. import org.springframework.transaction.annotation.Transactional;
  28. import java.util.*;
  29. import java.util.concurrent.TimeUnit;
  30. import static com.ydd.module.enums.CacheKeyEnum.SMS_REGISTER_CAPTCHA;
  31. /**
  32. * Project:lb-server
  33. * Class:ApiShopServiceImpl
  34. * Description:TODO
  35. * Time:2021/3/1 17:40
  36. *
  37. * @author zoe
  38. */
  39. @Slf4j
  40. @Service
  41. @RequiredArgsConstructor(onConstructor_ = @Autowired)
  42. public class ApiDevelopServiceImpl implements ApiDevelopService {
  43. private final IMemberService iMemberService;
  44. private final IShopService iShopService;
  45. private final IMerchantService iMerchantService;
  46. private final IAppInfoService iAppInfoService;
  47. private final IAppInfoTokenService iAppInfoTokenService;
  48. private final RedisCache redisCache;
  49. private final TokenService tokenService;
  50. private final IRechargeService iRechargeService;
  51. private final IRechargeOptionService iRechargeOptionService;
  52. private final IMemberCouponService iMemberCouponService;
  53. @Override
  54. @Transactional(rollbackFor = Exception.class)
  55. public ResponseResult saveMerchant(Long loginId, DevelopMerchantDto merchantDto) {
  56. merchantDto.setCategoryId(1l);
  57. Member member = iMemberService.getMemberByMobile(merchantDto.getUserAccount());
  58. if (member != null) {
  59. return ResponseResult.error(ResponseResultCodeEnum.USER_MOBILE_EXIST);
  60. }
  61. Merchant merchant = new Merchant();
  62. BeanUtils.copyProperties(merchantDto, merchant);
  63. merchant.setStatus(MerchantStatusEnum.TO_BE_CERTIFIED.getStatus());
  64. merchant.setCode(SnCodeUtils.createMerchantSn());
  65. iMerchantService.save(merchant);
  66. Shop shop = new Shop();
  67. shop.setAddress(merchantDto.getAddress());
  68. shop.setCategoryId(merchantDto.getCategoryId());
  69. shop.setCode(SnCodeUtils.createShopSn());
  70. shop.setContactName(merchantDto.getContactName());
  71. shop.setLat(merchantDto.getLat());
  72. shop.setLng(merchantDto.getLng());
  73. shop.setMerchantId(merchant.getId());
  74. shop.setMobile(merchantDto.getMobile());
  75. shop.setName(merchantDto.getMerchantName());
  76. shop.setStreet(merchantDto.getStreet());
  77. shop.setProvinceName(merchantDto.getProvinceName());
  78. shop.setCityName(merchantDto.getCityName());
  79. shop.setDistrictName(merchantDto.getDistrictName());
  80. shop.setCityCode(merchantDto.getCityCode());
  81. shop.setBizLicense(merchantDto.getBizLicense());
  82. shop.setBizLicenseNo(merchantDto.getBizLicenseNo());
  83. shop.setLegalPerson(merchantDto.getLegalPerson());
  84. shop.setIdcardNo(merchantDto.getIdcardNo());
  85. shop.setIdcardFront(merchantDto.getIdcardFront());
  86. shop.setIdcardBack(merchantDto.getIdcardBack());
  87. shop.setBizLicenseIdcard(merchantDto.getBizLicenseIdcard());
  88. shop.setFoodLicensePic(merchantDto.getFoodLicensePic());
  89. shop.setPoiAddress(merchantDto.getPoiAddress());
  90. iShopService.save(shop);
  91. member = new Member();
  92. member.setMobile(merchantDto.getUserAccount());
  93. member.setNickname(merchantDto.getUserAccount());
  94. member.setStatus(Constants.NORMAL);
  95. member.setAliasId(UUID.fastUUID().toString().replaceAll("-", ""));
  96. if (StringUtils.isNotBlank(merchantDto.getPassword())) {
  97. member.setPassword(Md5Utils.hash(merchantDto.getPassword()));
  98. }
  99. member.setMerchantId(merchant.getId());
  100. member.setMemberType(MemberTypeEnum.MERCHANT.type);
  101. member.setShopId(shop.getId());
  102. iMemberService.save(member);
  103. return ResponseResult.success();
  104. }
  105. @Override
  106. @Transactional(rollbackFor = Exception.class)
  107. public ResponseResult modify(Long loginId, DevelopMerchantDto merchantDto) {
  108. Merchant merchant = iMerchantService.getById(merchantDto.getMerchantId());
  109. BeanUtils.copyProperties(merchantDto, merchant);
  110. merchant.setStatus(MerchantStatusEnum.TO_BE_CERTIFIED.getStatus());
  111. iMerchantService.updateById(merchant);
  112. return ResponseResult.success();
  113. }
  114. @Override
  115. public ResponseResult audit(DevelopAuditDto developAuditDto) {
  116. Merchant merchant = iMerchantService.getById(developAuditDto.getMerchantId());
  117. Member member = iMemberService.getOne(new QueryWrapper<Member>().eq("member_type", 2).eq("merchant_id", developAuditDto.getMerchantId()));
  118. if (StatusEnum.SHOW.status.equals(developAuditDto.getStatus())) {
  119. merchant.setStatus(2);
  120. try {
  121. AppInfo appInfo_dev = new AppInfo();
  122. appInfo_dev.setName(merchant.getMerchantName());
  123. appInfo_dev.setSandbox(0);
  124. appInfo_dev.setStartTime(DateUtils.parseDate(developAuditDto.getStartTime()));
  125. appInfo_dev.setEndTime(DateUtils.parseDate(developAuditDto.getEndTime()));
  126. appInfo_dev.setEarnestMoney(developAuditDto.getEarnestMoney());
  127. iAppInfoService.createAppInfo(appInfo_dev);
  128. AppInfoToken token_dev = new AppInfoToken();
  129. token_dev.setAppId(appInfo_dev.getAppId());
  130. token_dev.setToken(Md5Utils.hash(member.getId().toString()));
  131. token_dev.setMemberId(member.getId());
  132. token_dev.setRefreshToken(Md5Utils.hash(merchant.getId().toString()));
  133. token_dev.setExpiresTime(DateUtils.addDays(new Date(), 30));
  134. iAppInfoTokenService.save(token_dev);
  135. } catch (Exception e) {
  136. e.printStackTrace();
  137. }
  138. }
  139. if (StatusEnum.STOP.status.equals(developAuditDto.getStatus())) {
  140. merchant.setStatus(StatusEnum.STOP.status);
  141. }
  142. iMerchantService.updateById(merchant);
  143. online(developAuditDto,member,merchant);
  144. return ResponseResult.success();
  145. }
  146. public ResponseResult online(DevelopAuditDto developAuditDto, Member member,Merchant merchant ) {
  147. AppInfo appInfo_pro = new AppInfo();
  148. appInfo_pro.setName(merchant.getMerchantName());
  149. appInfo_pro.setSandbox(1);
  150. appInfo_pro.setStartTime(DateUtils.parseDate(developAuditDto.getStartTime()));
  151. appInfo_pro.setEndTime(DateUtils.parseDate(developAuditDto.getEndTime()));
  152. appInfo_pro.setEarnestMoney(developAuditDto.getEarnestMoney());
  153. appInfo_pro.setMerchantId(merchant.getId());
  154. try {
  155. iAppInfoService.createAppInfo(appInfo_pro);
  156. } catch (Exception e) {
  157. }
  158. AppInfoToken token_pro = new AppInfoToken();
  159. token_pro.setAppId(appInfo_pro.getAppId());
  160. token_pro.setToken(Md5Utils.hash(member.getId().toString()));
  161. token_pro.setMemberId(member.getId());
  162. token_pro.setRefreshToken(Md5Utils.hash(appInfo_pro.getId().toString()));
  163. token_pro.setExpiresTime(DateUtils.addDays(new Date(), 30));
  164. iAppInfoTokenService.save(token_pro);
  165. tokenService.setMemberToken(token_pro.getToken(), member.getId());
  166. redisCache.setCacheObject(Constants.APP_REFRESH_TOKEN_KEY + token_pro.getRefreshToken(), member.getId(), 30, TimeUnit.DAYS);
  167. return ResponseResult.success();
  168. }
  169. @Override
  170. public ResponseResult refreshToken(String refreshToken) {
  171. Long memberId = redisCache.getCacheObject(Constants.APP_REFRESH_TOKEN_KEY + refreshToken);
  172. if (memberId == null) {
  173. return ResponseResult.error(ResponseResultCodeEnum.REFRESH_TOKEN_INVALID);
  174. }
  175. AppInfoToken token = iAppInfoTokenService.getOne(new QueryWrapper<AppInfoToken>().eq("refresh_token", refreshToken));
  176. if (token == null) {
  177. return ResponseResult.error(ResponseResultCodeEnum.REFRESH_TOKEN_INVALID);
  178. }
  179. token.setToken(Md5Utils.hash(memberId.toString()));
  180. token.setRefreshToken(Md5Utils.hash(token.getId().toString()));
  181. token.setExpiresTime(DateUtils.addDays(new Date(), 30));
  182. iAppInfoTokenService.updateById(token);
  183. redisCache.deleteObject(Constants.APP_REFRESH_TOKEN_KEY + token.getRefreshToken());
  184. redisCache.setCacheObject(Constants.APP_REFRESH_TOKEN_KEY + token.getRefreshToken(), memberId, 30, TimeUnit.DAYS);
  185. return ResponseResult.success(token);
  186. }
  187. @Override
  188. public ResponseResult memberInfo(Long loginId) {
  189. Member member = iMemberService.getById(loginId);
  190. if (Objects.isNull(member)) {
  191. return ResponseResult.error(ResponseResultCodeEnum.REFRESH_TOKEN_INVALID);
  192. }
  193. Merchant merchant = iMerchantService.getById(member.getMerchantId());
  194. OpenMemberInfoVo vo = new OpenMemberInfoVo();
  195. vo.setResistMobile(member.getMobile());
  196. vo.setBusinessName(merchant.getMerchantName());
  197. vo.setBusinessAddress(merchant.getAddress());
  198. vo.setContactName(merchant.getContactName());
  199. vo.setContactMobile(merchant.getMobile());
  200. return ResponseResult.success(vo);
  201. }
  202. @Override
  203. public ResponseResult editMemberInfo(OpenMemberInfoDto memberInfoDto) {
  204. Member member = iMemberService.getMemberByMobile(memberInfoDto.getResistMobile());
  205. ResponseResult result = memberInfoJudge(member, memberInfoDto.getResistMobile(), memberInfoDto.getCode());
  206. if (result.getCode() != ResponseResultCodeEnum.SUCCESS.getCode()) {
  207. return result;
  208. }
  209. Merchant merchant = iMerchantService.getById(member.getMerchantId());
  210. merchant.setContactName(memberInfoDto.getContactName());
  211. merchant.setMobile(memberInfoDto.getContactMobile());
  212. iMerchantService.updateById(merchant);
  213. return ResponseResult.success();
  214. }
  215. @Override
  216. public ResponseResult editMemberPassword(OpenMemberPasswordDto memberPasswordDto) {
  217. Member member = iMemberService.getMemberByMobile(memberPasswordDto.getResistMobile());
  218. ResponseResult result = memberInfoJudge(member, memberPasswordDto.getResistMobile(), memberPasswordDto.getCode());
  219. if (result.getCode() != ResponseResultCodeEnum.SUCCESS.getCode()) {
  220. return result;
  221. }
  222. if (!memberPasswordDto.getPassword().equals(memberPasswordDto.getConfirmPassword())) {
  223. return ResponseResult.error(ResponseResultCodeEnum.INCONSISTENT_CODE);
  224. }
  225. member.setPassword(Md5Utils.hash(memberPasswordDto.getPassword()));
  226. iMemberService.updateById(member);
  227. return ResponseResult.success();
  228. }
  229. @Override
  230. public ResponseResult appSecretInfo(Long loginId) {
  231. Member member = iMemberService.getById(loginId);
  232. if (Objects.isNull(member)) {
  233. return ResponseResult.error(ResponseResultCodeEnum.REFRESH_TOKEN_INVALID);
  234. }
  235. Merchant merchant = iMerchantService.getById(member.getMerchantId());
  236. List<AppInfo> appInfoList = iAppInfoService.list(new QueryWrapper<AppInfo>().eq("deleted", 0).eq("merchant_id", merchant.getId()));
  237. return ResponseResult.success(appInfoList);
  238. }
  239. @Override
  240. public ResponseResult setCallbackUrl(Long loginId, AppInfo appInfo) {
  241. ResponseResult result = appInfoJudge(loginId);
  242. if (result.getCode() != ResponseResultCodeEnum.SUCCESS.getCode()) {
  243. return result;
  244. }
  245. AppInfo oldAppInfo = (AppInfo) result.getData();
  246. List<AppInfo> appInfoList = iAppInfoService.list(new QueryWrapper<AppInfo>().eq("deleted", 0).eq("name", oldAppInfo.getName()));
  247. appInfoList.stream().forEach(appInfo1 -> {
  248. appInfo1.setStoreStatusNotifyUrl(appInfo.getStoreStatusNotifyUrl());
  249. appInfo1.setOrderStatusNotifyUrl(appInfo.getOrderStatusNotifyUrl());
  250. iAppInfoService.updateById(appInfo1);
  251. });
  252. return ResponseResult.success();
  253. }
  254. @Override
  255. public ResponseResult selectCustomerList(String cityName, String businessName, String contactName) {
  256. List<OpenCustomerDto> customerVoList = iMerchantService.selectCustomerList(cityName, businessName, contactName);
  257. return ResponseResult.success(new PageResult(customerVoList));
  258. }
  259. @Override
  260. public ResponseResult myWallet(Long loginId) {
  261. Member member = iMemberService.getById(loginId);
  262. if (Objects.isNull(member)) {
  263. return ResponseResult.error(ResponseResultCodeEnum.REFRESH_TOKEN_INVALID);
  264. }
  265. OpenMyWalletVo vo = new OpenMyWalletVo();
  266. List<RechargeOption> options = iRechargeOptionService.list(new QueryWrapper<RechargeOption>().eq("status", StatusEnum.SHOW.status).orderByDesc("sort"));
  267. vo.setRechargeOptionList(options);
  268. vo.setAmount(member.getAmount());
  269. Date now = new Date();
  270. int couponNum = iMemberCouponService.count(new QueryWrapper<MemberCoupon>()
  271. .eq("member_id", member.getId())
  272. .eq("status", MemberCouponStatusEnum.NOT_USED.status)
  273. .le("valid_start_time", now)
  274. .ge("valid_end_time", now));
  275. vo.setCouponNum(couponNum);
  276. return ResponseResult.success(vo);
  277. }
  278. @Override
  279. public ResponseResult rechargeList(Long loginId, String startTime, String endTime) {
  280. List<Recharge> rechargeList = iRechargeService.selectOpenRechargeList(loginId, startTime, endTime);
  281. return ResponseResult.success(rechargeList);
  282. }
  283. private ResponseResult memberInfoJudge(Member member, String resistMobile, String code) {
  284. ResponseResult result = ResponseResult.success();
  285. if (Objects.isNull(member)) {
  286. return ResponseResult.error(ResponseResultCodeEnum.FAIL);
  287. }
  288. String checkCode = redisCache.getCacheObject(SMS_REGISTER_CAPTCHA.key + resistMobile);
  289. if (StringUtils.isBlank(checkCode) || !code.equals(checkCode)) {
  290. return ResponseResult.error(ResponseResultCodeEnum.INVALID_SMS_CODE);
  291. }
  292. return result;
  293. }
  294. private ResponseResult appInfoJudge(Long loginId) {
  295. ResponseResult result = ResponseResult.success();
  296. Member member = iMemberService.getById(loginId);
  297. if (Objects.isNull(member)) {
  298. return ResponseResult.error(ResponseResultCodeEnum.REFRESH_TOKEN_INVALID);
  299. }
  300. Merchant merchant = iMerchantService.getById(member.getMerchantId());
  301. AppInfo appInfo = iAppInfoService.getByAppId(merchant.getAppId());
  302. if (Objects.isNull(appInfo)) {
  303. return ResponseResult.error(ResponseResultCodeEnum.APP_ID_ERR);
  304. }
  305. result.setData(appInfo);
  306. return result;
  307. }
  308. }