RegisterServiceImpl.java 63 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452
  1. package com.caimei365.user.service.impl;
  2. import com.caimei365.user.components.CommonService;
  3. import com.caimei365.user.components.RedisService;
  4. import com.caimei365.user.components.WeChatService;
  5. import com.caimei365.user.feign.ToolsFeign;
  6. import com.caimei365.user.mapper.*;
  7. import com.caimei365.user.model.ResponseJson;
  8. import com.caimei365.user.model.dto.*;
  9. import com.caimei365.user.model.po.*;
  10. import com.caimei365.user.model.vo.*;
  11. import com.caimei365.user.service.RegisterService;
  12. import com.caimei365.user.service.RemoteCallService;
  13. import com.caimei365.user.utils.*;
  14. import lombok.extern.slf4j.Slf4j;
  15. import org.apache.commons.lang.StringUtils;
  16. import org.springframework.beans.factory.annotation.Value;
  17. import org.springframework.http.HttpHeaders;
  18. import org.springframework.scheduling.annotation.Scheduled;
  19. import org.springframework.stereotype.Service;
  20. import org.springframework.transaction.annotation.Transactional;
  21. import javax.annotation.Resource;
  22. import java.io.IOException;
  23. import java.math.BigDecimal;
  24. import java.text.ParseException;
  25. import java.text.SimpleDateFormat;
  26. import java.util.*;
  27. /**
  28. * Description
  29. *
  30. * @author : Charles
  31. * @date : 2021/3/8
  32. */
  33. @Slf4j
  34. @Service
  35. public class RegisterServiceImpl implements RegisterService {
  36. @Value("${spring.cloud.config.profile}")
  37. private String profile;
  38. @Resource
  39. private SuperVipMapper vipMapper;
  40. @Resource
  41. private RedisService redisService;
  42. @Resource
  43. private CommonService commonService;
  44. @Resource
  45. private BaseMapper baseMapper;
  46. @Resource
  47. private LoginMapper loginMapper;
  48. @Resource
  49. private RegisterMapper registerMapper;
  50. @Resource
  51. private SellerMapper sellerMapper;
  52. @Resource
  53. private ToolsFeign smsFeign;
  54. @Resource
  55. private MessagePushMapper messagePushMapper;
  56. @Resource
  57. private MessageCenterMapper messageCenterMapper;
  58. @Resource
  59. private RemoteCallService remoteCallService;
  60. @Resource
  61. private WeChatService weChatService;
  62. @Resource
  63. private ClubMapper clubMapper;
  64. /**
  65. * 检查账号可以注册
  66. *
  67. * @param mobile 手机号
  68. * @return sucess
  69. */
  70. @Override
  71. public ResponseJson registerCheck(String mobile) {
  72. // 手机号验证
  73. String mobileResult = commonService.mobileAndCodeValidate(mobile, null);
  74. if (mobileResult != null) {
  75. return ResponseJson.error(mobileResult);
  76. }
  77. return ResponseJson.success("该账号可以注册");
  78. }
  79. /**
  80. * 普通机构入驻(注册)
  81. *
  82. * @param clubRegisterDto ClubRegisterDto{
  83. * source 注册来源: 0网站 1小程序
  84. * userName 用户名
  85. * bindMobile 企业绑定手机号
  86. * password 密码
  87. * unionId 微信unionId
  88. * nickName 微信昵称
  89. * avatarUrl 微信头像(旧:headimgurl)
  90. * passWordConfirm 用户确认密码
  91. * smsCode 短信验证码(旧:activationCode)
  92. * isAgreed 是否同意勾选同意协议,1是,其他否
  93. * }
  94. * @param headers HttpHeaders
  95. * @return ClubPo
  96. */
  97. @Override
  98. @Transactional(rollbackFor = Exception.class)
  99. public ResponseJson clubRegister(ClubRegisterDto clubRegisterDto, HttpHeaders headers) {
  100. // 打印IP
  101. String ip = headers.getFirst("X-CLIENT-IP");
  102. log.info("机构注册 X-CLIENT-IP : " + ip);
  103. // 参数校验
  104. if (StringUtils.isBlank(clubRegisterDto.getUserName())) {
  105. return ResponseJson.error("参数异常:用户名不能为空!");
  106. }
  107. if (StringUtils.isBlank(clubRegisterDto.getBindMobile())) {
  108. return ResponseJson.error("参数异常:企业绑定手机号不能为空!");
  109. }
  110. if (StringUtils.isBlank(clubRegisterDto.getPassword())) {
  111. return ResponseJson.error("参数异常:密码不能为空!");
  112. }
  113. if (StringUtils.isBlank(clubRegisterDto.getPassWordConfirm())) {
  114. return ResponseJson.error("参数异常:确认密码不能为空!");
  115. }
  116. if (StringUtils.isBlank(clubRegisterDto.getSmsCode())) {
  117. return ResponseJson.error("参数异常:短信验证码不能为空!");
  118. }
  119. if (null == clubRegisterDto.getIsAgreed() || 1 != clubRegisterDto.getIsAgreed()) {
  120. return ResponseJson.error("请勾选同意协议");
  121. }
  122. if (!clubRegisterDto.getPassword().equals(clubRegisterDto.getPassWordConfirm())) {
  123. return ResponseJson.error("两次输入的密码不一致");
  124. }
  125. // 手机号与验证码校验
  126. String result = commonService.mobileAndCodeValidate(clubRegisterDto.getBindMobile(), clubRegisterDto.getSmsCode());
  127. if (result != null) {
  128. return ResponseJson.error(result);
  129. }
  130. // 密码校验
  131. String passResult = ValidateUtil.validatePassWord(clubRegisterDto.getPassword());
  132. if (passResult != null) {
  133. return ResponseJson.error(passResult);
  134. }
  135. // 获取ip所在地
  136. String ipAddress = "";
  137. Integer provinceId = null;
  138. Integer cityId = null;
  139. try {
  140. ipAddress = IpUtil.recordIp(ip);
  141. Map<String, String> map = IpUtil.recordAddress(ip);
  142. // 省
  143. String regionPro = map.get("regionPro");
  144. provinceId = registerMapper.selProvince(regionPro);
  145. // 市
  146. String regionCity = map.get("regionCity");
  147. cityId = registerMapper.selCity(regionCity);
  148. } catch (IOException e) {
  149. e.printStackTrace();
  150. }
  151. log.info("ip所在地====》"+ipAddress);
  152. /*
  153. 组装用户数据 user
  154. */
  155. UserPo user = new UserPo();
  156. // 设置日期时间格式
  157. Date date = new Date();
  158. SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  159. String current = dateFormat.format(date);
  160. // 注册时间
  161. user.setRegisterTime(current);
  162. // 注册IP
  163. user.setRegisterIp(ip);
  164. // 注册IP所在地
  165. user.setIpAddress(ipAddress);
  166. // 注册来源: 0网站 1小程序
  167. user.setSource(clubRegisterDto.getSource());
  168. // 用户类型,供应商1,会员机构3,普通机构4
  169. user.setRegisterUserTypeId(4);
  170. // 采美默认组织机构0
  171. user.setOrganizeId(0);
  172. // 用户名
  173. user.setName(clubRegisterDto.getUserName());
  174. user.setUserName(clubRegisterDto.getUserName());
  175. // 绑定手机号
  176. user.setBindMobile(clubRegisterDto.getBindMobile());
  177. // 用户身份: 1协销 2会员机构 3供应商 4普通机构
  178. user.setUserIdentity(4);
  179. // 用户权限: 2会员机构 3供应商 4协销 5普通机构
  180. user.setUserPermission(5);
  181. // 是否已经引导过(机构升级:0否,1是)
  182. user.setGuideFlag(0);
  183. // 设置机构上线
  184. user.setClubStatus(90);
  185. // 设置密码
  186. user.setPassword(Md5Util.md5(clubRegisterDto.getPassword()));
  187. // 同意协议
  188. user.setAgreeFlag(1);
  189. // 用户状态,1正常,0冻结
  190. user.setValidFlag(1);
  191. // 协销Id,默认采美官方
  192. user.setServiceProviderId(1342);
  193. // 协销状态,已上线
  194. user.setServiceProviderStatus(90);
  195. //采美豆
  196. user.setUserBeans(1000);
  197. /*
  198. 保存数据库 user
  199. */
  200. int insertFlag = registerMapper.insertClubUser(user);
  201. log.info("插入数据库User表,获得userId:" + user.getUserId());
  202. if (insertFlag < 1) {
  203. throw new RuntimeException("插入数据库异常user:" + user.toString());
  204. }
  205. /*
  206. 保存用户状态
  207. */
  208. List<UserPo> userPos = registerMapper.selUser(current);
  209. for (UserPo userInfo : userPos) {
  210. registerMapper.insertOrgan(userInfo.getUserId());
  211. }
  212. /*
  213. 组装机构数据
  214. */
  215. ClubPo club = new ClubPo();
  216. // 机构名称
  217. club.setName(user.getUserName());
  218. // 联系手机
  219. club.setContractMobile(user.getBindMobile());
  220. // 联系人
  221. club.setLinkMan(user.getUserName());
  222. // 用户Id
  223. club.setUserId(user.getUserId());
  224. // 协销Id(spId)
  225. club.setServiceProviderId(1342);
  226. // 注册时间
  227. club.setAddTime(current);
  228. // 状态设置上线
  229. club.setStatus(90);
  230. if (4 == user.getUserIdentity()) {
  231. if (null != provinceId) {
  232. club.setProvinceId(provinceId);
  233. }
  234. if (null != cityId) {
  235. club.setCityId(cityId);
  236. }
  237. }
  238. /*
  239. 保存数据库 club
  240. */
  241. int insertClubFlag = registerMapper.insertClub(club);
  242. log.info("插入数据库club表,获得clubId:" + club.getClubId());
  243. if (insertClubFlag < 1) {
  244. throw new RuntimeException("插入数据库异常club:" + club.toString());
  245. }
  246. // user更新clubId
  247. user.setClubId(club.getClubId());
  248. registerMapper.updateUserClubId(user.getUserId(), club.getClubId());
  249. // 添加机构协销记录
  250. if (StringUtils.isNotBlank(club.getLinkMan())) {
  251. clubMapper.inProvider(1342, club.getClubId(), club.getLinkMan(), 0);
  252. }
  253. //推送信息中心-账户通知
  254. MessageCenter messageCenter = new MessageCenter();
  255. messageCenter.setShopId(null);
  256. messageCenter.setClubId(club.getClubId());
  257. messageCenter.setUserType(1);
  258. messageCenter.setMessageType(2);
  259. messageCenter.setAccountType(1);
  260. messageCenter.setContent(null);
  261. messageCenter.setTime(current);
  262. messageCenterMapper.addMessageCenter(messageCenter);
  263. // 绑定微信,成为机构运营人员
  264. if (StringUtils.isNotEmpty(clubRegisterDto.getNickName())) {
  265. MessageCenter messageCente = new MessageCenter();
  266. messageCente.setShopId(null);
  267. messageCente.setClubId(club.getClubId());
  268. messageCente.setUserType(1);
  269. messageCente.setMessageType(2);
  270. messageCente.setAccountType(7);
  271. messageCente.setContent(clubRegisterDto.getNickName());
  272. messageCente.setTime(current);
  273. messageCenterMapper.addMessageCenter(messageCente);
  274. OperationPo operation = new OperationPo();
  275. // 组织Id,采美默认0
  276. operation.setOrganizeId(0);
  277. // 用户Id
  278. operation.setUserId(user.getUserId());
  279. // 机构Id
  280. operation.setClubId(club.getClubId());
  281. // 微信昵称
  282. operation.setNickName(clubRegisterDto.getNickName());
  283. // 微信头像
  284. operation.setAvatarUrl(clubRegisterDto.getAvatarUrl());
  285. // 用户类型,1:机构类型,2供应商类型
  286. operation.setUserType(1);
  287. // 运营人员手机号
  288. operation.setMobile(clubRegisterDto.getBindMobile());
  289. // 联系人
  290. operation.setLinkName(clubRegisterDto.getUserName());
  291. // 运营人员状态:1未绑定,2已绑定
  292. operation.setStatus(2);
  293. // 微信unionId
  294. operation.setUnionId(clubRegisterDto.getUnionId());
  295. Map<Object, Object> infoData = redisService.getEntries("wxInfo:applets:" + clubRegisterDto.getUnionId());
  296. String openId = (String) infoData.get(WeChatService.Keys.OPEN_ID);
  297. // 微信openId
  298. operation.setOpenId(openId);
  299. // 添加时间
  300. operation.setAddTime(date);
  301. // 更新时间
  302. operation.setUpdateTime(date);
  303. // 绑定时间
  304. operation.setBindTime(date);
  305. // delFlag: 0 有效 其它无效
  306. operation.setDelFlag(0);
  307. /*
  308. 保存数据库 operation
  309. */
  310. int insertOperationFlag = registerMapper.insertOperation(operation);
  311. log.info("插入数据库cm_mall_operation_user表,获得id:" + operation.getId());
  312. if (insertOperationFlag < 1) {
  313. log.info(operation.getUserId() + " 插入数据库异常operation:" + operation.toString());
  314. }
  315. log.info("注册普通机构,默认绑定为机构运营人员");
  316. }
  317. log.info("注册普通机构成功,手机号>>>" + clubRegisterDto.getBindMobile());
  318. // if (!smsFlag) {
  319. // log.info("短信发送失败,手机号:" + clubRegisterDto.getBindMobile());
  320. // }
  321. //新用户自主注册送1000采美豆
  322. UserBeansHistoryPo beansHistory = new UserBeansHistoryPo();
  323. beansHistory.setUserId(user.getUserId());
  324. beansHistory.setBeansType(1);
  325. beansHistory.setType(1);
  326. beansHistory.setNum(1000);
  327. beansHistory.setPushStatus(0);
  328. beansHistory.setAddTime(date);
  329. registerMapper.insertBeansHistory(beansHistory);
  330. return ResponseJson.success("机构注册成功", null);
  331. }
  332. /**
  333. * 普通机构升级会员机构(资质机构)
  334. *
  335. * @param upgradeDto ClubUpgradeDto:{
  336. * clubId 机构ID
  337. * userId 用户ID
  338. * name 机构名称
  339. * shortName 机构简称
  340. * contractEmail 邮箱(contractEmail1)
  341. * contractPhone 固定电话
  342. * linkMan 联系人(linkMan1)
  343. * provinceId 省Id
  344. * cityId 市Id
  345. * townId 县区Id
  346. * address 地址
  347. * shopPhoto 门头照(headpic)
  348. * businessLicense 营业执照(businessLicenseImage)
  349. * socialCreditCode 统一社会信用代码(socialCreditCode)
  350. * firstClubType 一级分类:医美=1和生美=2
  351. * secondClubType 医美的二级分类:诊所=1、门诊=2、医院=3。 生美没有二级分类
  352. * department 医美分类下的门诊和医院则需要填写科室
  353. * medicalPracticeLicense 医美分类必须上传医疗执业许可证(medicalPracticeLicenseImg)
  354. * mainProduct 主打项目(mainpro)
  355. * fax 传真
  356. * profile 公司简介
  357. * }
  358. * @param headers HttpHeaders
  359. * @return ClubPo
  360. */
  361. @Override
  362. @Transactional(rollbackFor = Exception.class)
  363. public ResponseJson clubUpgrade(ClubUpgradeDto upgradeDto, HttpHeaders headers) {
  364. // 打印IP
  365. String ip = headers.getFirst("X-CLIENT-IP");
  366. log.info("机构升级 X-CLIENT-IP : " + ip);
  367. // 参数校验
  368. if (null == upgradeDto.getUserId()) {
  369. return ResponseJson.error("参数异常:用户Id不能为空!");
  370. }
  371. if (null == upgradeDto.getClubId()) {
  372. return ResponseJson.error("参数异常:机构Id不能为空!");
  373. }
  374. if (StringUtils.isBlank(upgradeDto.getContractEmail())) {
  375. return ResponseJson.error("参数异常:联系邮箱不能为空!");
  376. }
  377. if (StringUtils.isBlank(upgradeDto.getName())) {
  378. return ResponseJson.error("参数异常:机构名称不能为空!");
  379. }
  380. if (StringUtils.isBlank(upgradeDto.getBusinessLicense())) {
  381. return ResponseJson.error("参数异常:营业执照不能为空!");
  382. }
  383. if (null == upgradeDto.getTownId()) {
  384. return ResponseJson.error("参数异常:请选择地址!");
  385. }
  386. if (null == upgradeDto.getFirstClubType()) {
  387. return ResponseJson.error("参数异常:一级分类不能为空!");
  388. }
  389. if (upgradeDto.getFirstClubType() == 1) {
  390. // 医美分类
  391. if (upgradeDto.getSecondClubType() == null || StringUtils.isBlank(upgradeDto.getMedicalPracticeLicense())) {
  392. return ResponseJson.error("医美分类下参数异常,医美的二级分类为空或医疗执业许可证为空");
  393. }
  394. }
  395. Integer userIdByEmail = baseMapper.getUserIdByEmail(upgradeDto.getContractEmail());
  396. if (null != userIdByEmail && userIdByEmail > 0 && !userIdByEmail.equals(upgradeDto.getUserId())) {
  397. return ResponseJson.error("该邮箱已被使用");
  398. }
  399. String nameCheck = ValidateUtil.validateClubName(upgradeDto.getName());
  400. if (nameCheck != null) {
  401. return ResponseJson.error(nameCheck);
  402. }
  403. String socialCodeResult = ValidateUtil.validateSocialCreditCode(upgradeDto.getSocialCreditCode());
  404. if (socialCodeResult != null) {
  405. return ResponseJson.error(socialCodeResult);
  406. }
  407. // 更新用户数据 user
  408. UserPo user = new UserPo();
  409. user.setUserId(upgradeDto.getUserId());
  410. // 客户IP
  411. user.setRegisterIp(ip);
  412. // 联系邮箱
  413. user.setEmail(upgradeDto.getContractEmail());
  414. // 机构名称
  415. user.setName(upgradeDto.getName());
  416. // 待审核资料
  417. user.setClubStatus(1);
  418. // 更新机构用户
  419. registerMapper.updateClubUserByUpgrade(user);
  420. /*
  421. 组装机构数据
  422. */
  423. ClubPo club = new ClubPo();
  424. // 机构Id
  425. club.setClubId(upgradeDto.getClubId());
  426. // 用户Id
  427. club.setUserId(upgradeDto.getUserId());
  428. // 机构名称
  429. club.setName(upgradeDto.getName());
  430. // 机构简称
  431. club.setShortName(upgradeDto.getShortName());
  432. // 联系邮箱
  433. club.setContractEmail(upgradeDto.getContractEmail());
  434. // 固定电话
  435. club.setContractPhone(upgradeDto.getContractPhone());
  436. // 联系人
  437. club.setLinkMan(upgradeDto.getLinkMan());
  438. // 联系人身份
  439. club.setLinkManIdentity(upgradeDto.getLinkManIdentity());
  440. // 地址
  441. club.setProvinceId(upgradeDto.getProvinceId());
  442. club.setCityId(upgradeDto.getCityId());
  443. club.setTownId(upgradeDto.getTownId());
  444. club.setAddress(upgradeDto.getAddress());
  445. // 门头照
  446. club.setShopPhoto(upgradeDto.getShopPhoto());
  447. // 营业执照
  448. club.setBusinessLicense(upgradeDto.getBusinessLicense());
  449. // 统一社会信用代码
  450. club.setSocialCreditCode(upgradeDto.getSocialCreditCode());
  451. // 分类: 1医美, 2生美
  452. club.setFirstClubType(upgradeDto.getFirstClubType());
  453. if (upgradeDto.getFirstClubType() == 1) {
  454. // 医美二级分类: 1诊所、2门诊、3医院
  455. club.setSecondClubType(upgradeDto.getSecondClubType());
  456. // 门诊和医院则需要填写科室
  457. club.setDepartment(upgradeDto.getDepartment());
  458. // 医美分类必须上传医疗执业许可证
  459. club.setMedicalPracticeLicense(upgradeDto.getMedicalPracticeLicense());
  460. }
  461. // 主打项目(mainpro)
  462. club.setMainProduct(upgradeDto.getMainProduct());
  463. // 传真
  464. club.setFax(upgradeDto.getFax());
  465. // 公司简介(info)
  466. club.setProfile(upgradeDto.getProfile());
  467. /*
  468. * 待审核资料
  469. */
  470. club.setStatus(1);
  471. registerMapper.updateClubByUpgrade(club);
  472. return ResponseJson.success("机构升级成功", null);
  473. }
  474. /**
  475. * 协销拉机构上线
  476. *
  477. * @param id 暂存机构数据id
  478. * @return ClubPo
  479. */
  480. @Override
  481. @Transactional(rollbackFor = Exception.class)
  482. public ResponseJson<Integer> clubOnline(Integer id, HttpHeaders headers) {
  483. ClubTemporaryVo clubTemporary = registerMapper.getTemporary(id);
  484. if (clubTemporary == null) {
  485. return ResponseJson.error("机构数据异常", null);
  486. }
  487. Integer isAgreed = clubTemporary.getIsAgreed();
  488. // 打印IP
  489. String ip = headers.getFirst("X-CLIENT-IP");
  490. log.info("协销拉机构上线 X-CLIENT-IP : " + ip);
  491. // 手机号
  492. String mobile = clubTemporary.getBindMobile();
  493. // 参数校验
  494. if (null == clubTemporary.getUserId()) {
  495. return ResponseJson.error("参数异常:用户Id不能为空!", null);
  496. }
  497. if (StringUtils.isBlank(mobile)) {
  498. return ResponseJson.error("参数异常:企业绑定手机号不能为空!", null);
  499. }
  500. if (StringUtils.isBlank(clubTemporary.getLinkMan())) {
  501. return ResponseJson.error("参数异常:联系人不能为空!", null);
  502. }
  503. if (null == isAgreed || 1 != isAgreed) {
  504. return ResponseJson.error("请勾选同意协议", null);
  505. }
  506. // 是否填写升级资料
  507. Integer confirmUserId = clubTemporary.getConfirmUserId();
  508. UserLoginVo userLogin = null;
  509. if (confirmUserId != null) {
  510. userLogin = loginMapper.getLoginUserByUserId(confirmUserId);
  511. }
  512. String businessLicense = clubTemporary.getBusinessLicense();
  513. String email = clubTemporary.getContractEmail();
  514. if (StringUtils.isNotBlank(businessLicense)) {
  515. if (confirmUserId == null || (userLogin != null && !userLogin.getEmail().equals(email))) {
  516. // 邮箱验证
  517. String emailCheck = commonService.emailValidate(email);
  518. if (emailCheck != null) {
  519. return ResponseJson.error(emailCheck, null);
  520. }
  521. }
  522. // 机构名称检查
  523. String nameCheck = ValidateUtil.validateClubName(clubTemporary.getName());
  524. if (nameCheck != null) {
  525. return ResponseJson.error(nameCheck, null);
  526. }
  527. if (clubTemporary.getFirstClubType() == 1) {
  528. // 医美分类
  529. if (clubTemporary.getSecondClubType() == null || StringUtils.isBlank(clubTemporary.getMedicalPracticeLicense())) {
  530. return ResponseJson.error("医美分类下参数异常,医美的二级分类为空或医疗执业许可证为空", null);
  531. }
  532. }
  533. }
  534. if (confirmUserId == null || (userLogin != null && !userLogin.getBindMobile().equals(mobile))) {
  535. // 手机号验证
  536. String result = commonService.mobileAndCodeValidate(mobile, null);
  537. if (result != null) {
  538. return ResponseJson.error(result, null);
  539. }
  540. }
  541. // 获取协销信息
  542. Integer userId = clubTemporary.getUserId();
  543. ServiceProviderVo serviceProvider = loginMapper.getServiceProviderByUserId(userId);
  544. // 设置日期时间格式
  545. SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  546. String current = dateFormat.format(new Date());
  547. // 获取ip所在地
  548. String ipAddress = "";
  549. Integer provinceId = null;
  550. Integer cityId = null;
  551. try {
  552. ipAddress = IpUtil.recordIp(ip);
  553. // 获取省市地址
  554. Map<String, String> map = IpUtil.recordAddress(ip);
  555. // 省
  556. String regionPro = map.get("regionPro");
  557. provinceId = registerMapper.selProvince(regionPro);
  558. // 市
  559. String regionCity = map.get("regionCity");
  560. cityId = registerMapper.selCity(regionCity);
  561. } catch (IOException e) {
  562. e.printStackTrace();
  563. }
  564. log.info("ip所在地====》"+ipAddress);
  565. /*
  566. 组装用户数据 user
  567. */
  568. UserPo user = new UserPo();
  569. // 注册时间
  570. user.setRegisterTime(current);
  571. // 机构拉上线统称为此IP方便后面直接标记为协销代注册
  572. user.setRegisterIp("192.168.1.10");
  573. // 注册IP所在地
  574. user.setIpAddress(ipAddress);
  575. // 注册来源: 0网站 1小程序(拉机构上线小程序注册)
  576. user.setSource(1);
  577. // 采美默认组织机构0
  578. user.setOrganizeId(0);
  579. // 用户类型,供应商1,会员机构3,普通机构4
  580. user.setRegisterUserTypeId(4);
  581. // 组织名称
  582. user.setName(clubTemporary.getLinkMan());
  583. // 用户名
  584. user.setUserName(clubTemporary.getLinkMan());
  585. // 绑定手机号
  586. user.setBindMobile(mobile);
  587. // 用户身份: 1协销 2会员机构 3供应商 4普通机构
  588. user.setUserIdentity(4);
  589. // 用户权限: 2会员机构 3供应商 4协销 5普通机构
  590. user.setUserPermission(5);
  591. // 设置机构上线
  592. user.setClubStatus(90);
  593. // 默认密码
  594. String randomCode = CodeUtil.generateCodeInt(6);
  595. String initPassword = "cm" + randomCode;
  596. user.setPassword(Md5Util.md5(initPassword));
  597. // 同意协议
  598. user.setAgreeFlag(isAgreed);
  599. // 用户状态,1正常,0冻结
  600. user.setValidFlag(1);
  601. // 协销Id
  602. user.setServiceProviderId(serviceProvider.getServiceProviderId());
  603. // 协销状态
  604. user.setServiceProviderStatus(serviceProvider.getStatus());
  605. // 会员机构,填写升级资料
  606. if (StringUtils.isNotBlank(businessLicense)) {
  607. // 状态:待审查资料
  608. user.setClubStatus(1);
  609. // 组织名称
  610. user.setName(clubTemporary.getName());
  611. // 邮箱
  612. user.setEmail(email);
  613. // 是否已经引导过(机构升级:0否,1是)
  614. user.setGuideFlag(1);
  615. } else {
  616. // 是否已经引导过(机构升级:0否,1是)
  617. user.setGuideFlag(0);
  618. }
  619. /* 保存数据库 user */
  620. if (confirmUserId == null) {
  621. int insertUserFlag = registerMapper.insertClubUser(user);
  622. log.info("插入数据库User表,获得userId:" + user.getUserId());
  623. if (insertUserFlag < 1) {
  624. throw new RuntimeException("插入数据库异常user:" + user.toString());
  625. }
  626. } else {
  627. user.setUserId(confirmUserId);
  628. user.setClubStatus(90);
  629. registerMapper.updateClubUser(user);
  630. log.info("客服注册机构注册,更新user表userId>>>>>" + confirmUserId);
  631. }
  632. /* 机构列表用户状态默认插入 */
  633. if(user.getUserId() != null) {
  634. registerMapper.insertOrgan(user.getUserId());
  635. log.info("插入数据库用户价值表,cm_organ_value_system表userid=====》" + user.getUserId());
  636. }
  637. /*
  638. 组装机构数据
  639. */
  640. ClubPo club = new ClubPo();
  641. int insertClubFlag = 0;
  642. // 联系手机
  643. club.setContractMobile(mobile);
  644. // 联系人
  645. club.setLinkMan(clubTemporary.getLinkMan());
  646. // 用户Id
  647. club.setUserId(user.getUserId());
  648. // 设置协销ID
  649. club.setServiceProviderId(serviceProvider.getServiceProviderId());
  650. // 待扫描
  651. club.setScanFlag(0);
  652. // 注册时间
  653. club.setAddTime(current);
  654. // 会员机构,填写升级资料
  655. if (StringUtils.isNotBlank(businessLicense)) {
  656. // 机构名称
  657. club.setName(clubTemporary.getName());
  658. // 机构简称
  659. club.setShortName(clubTemporary.getShortName());
  660. // 邮箱
  661. club.setContractEmail(email);
  662. // 待审查资料
  663. club.setStatus(1);
  664. // 地址
  665. club.setProvinceId(clubTemporary.getProvinceId());
  666. club.setCityId(clubTemporary.getCityId());
  667. club.setTownId(clubTemporary.getTownId());
  668. club.setAddress(clubTemporary.getAddress());
  669. // 门头照
  670. club.setShopPhoto(clubTemporary.getShopPhoto());
  671. // 营业执照
  672. club.setBusinessLicense(businessLicense);
  673. // 统一社会信用代码
  674. club.setSocialCreditCode(clubTemporary.getSocialCreditCode());
  675. // 分类: 1医美, 2生美
  676. club.setFirstClubType(clubTemporary.getFirstClubType());
  677. if (clubTemporary.getFirstClubType() == 1) {
  678. // 医美二级分类: 1诊所、2门诊、3医院
  679. club.setSecondClubType(clubTemporary.getSecondClubType());
  680. // 门诊和医院则需要填写科室
  681. club.setDepartment(clubTemporary.getDepartment());
  682. // 医美分类必须上传医疗执业许可证
  683. club.setMedicalPracticeLicense(clubTemporary.getMedicalPracticeLicense());
  684. }
  685. // 主打项目(mainpro)
  686. club.setMainProduct(clubTemporary.getMainProduct());
  687. if (confirmUserId == null) {
  688. /*
  689. 保存数据库(会员机构) club
  690. */
  691. insertClubFlag = registerMapper.insertUpgradeClub(club);
  692. } else {
  693. club.setStatus(90);
  694. club.setUserId(confirmUserId);
  695. registerMapper.updateClub(club);
  696. }
  697. } else {
  698. // 机构名称
  699. club.setName(clubTemporary.getLinkMan());
  700. // 机构简称
  701. club.setShortName(clubTemporary.getLinkMan());
  702. // 状态设置上线
  703. club.setStatus(90);
  704. if (4 == user.getUserIdentity()) {
  705. club.setProvinceId(provinceId);
  706. club.setCityId(cityId);
  707. }
  708. if (confirmUserId == null) {
  709. /*
  710. 保存数据库(普通机构) club
  711. */
  712. insertClubFlag = registerMapper.insertClub(club);
  713. } else {
  714. club.setStatus(90);
  715. club.setUserId(confirmUserId);
  716. registerMapper.updateClub(club);
  717. }
  718. }
  719. if (confirmUserId == null) {
  720. log.info("插入数据库club表,获得clubId:" + club.getClubId());
  721. if (insertClubFlag < 1) {
  722. throw new RuntimeException("插入数据库异常club:" + club.toString());
  723. }
  724. // user更新clubId
  725. user.setClubId(club.getClubId());
  726. registerMapper.updateUserClubId(user.getUserId(), club.getClubId());
  727. }
  728. // 添加机构协销记录
  729. if (StringUtils.isNotBlank(club.getLinkMan())) {
  730. clubMapper.inProvider(serviceProvider.getServiceProviderId(), club.getClubId(), club.getLinkMan(), 1);
  731. }
  732. //推送信息中心-账户通知
  733. MessageCenter messageCenter=new MessageCenter();
  734. messageCenter.setShopId(null);
  735. messageCenter.setClubId(club.getClubId());
  736. messageCenter.setUserType(1);
  737. messageCenter.setMessageType(2);
  738. messageCenter.setAccountType(1);
  739. messageCenter.setContent(null);
  740. messageCenter.setTime(current);
  741. messageCenterMapper.addMessageCenter(messageCenter);
  742. /*
  743. * 操作成功,推送短信给机构,获取账号密码。
  744. * 协销去后台审核,机构用账号密码登录绑定微信
  745. */
  746. String logTxt = "【协销拉机构上线】短信内容:>>>欢迎成为采美 %s 用户,您的登录账号为:%s,初始密码为:%s";
  747. int smsType = 6;
  748. if (StringUtils.isNotBlank(email)) {
  749. // 会员机构
  750. logTxt = String.format(logTxt, "会员机构", mobile, initPassword);
  751. } else {
  752. // 普通机构
  753. logTxt = String.format(logTxt, "普通机构", mobile, initPassword);
  754. }
  755. // 发送短信
  756. String content = "欢迎成为采美机构用户,您的登录账号为:"+mobile+",初始密码为:cm"+randomCode+",您可使用该账号密码登录采美365网和“采美采购商城”小程序。";
  757. boolean smsFlag = remoteCallService.remoteSendSms(0, 1, mobile, content);
  758. if (!smsFlag) {
  759. // 短信发送失败重试一次
  760. remoteCallService.remoteSendSms(0, 1, mobile, content);
  761. }
  762. // 打印短信内容
  763. log.info(logTxt);
  764. if (!smsFlag) {
  765. log.info("短信发送失败,手机号:" + mobile);
  766. }
  767. sellerMapper.deleteTemporaryClub(id);
  768. // 返回状态
  769. return ResponseJson.success(user.getUserId());
  770. }
  771. /**
  772. * 供应商注册
  773. *
  774. * @param shopRegisterDto ShopRegisterDto{
  775. * source 注册来源: 0网站 1小程序
  776. * name 组织名称
  777. * shortName 供应商公司简称(shortName)
  778. * bindMobile 企业绑定手机号
  779. * email 邮箱
  780. * password 密码
  781. * linkMan 联系人
  782. * provinceId 省(provinceID)
  783. * cityId 市(cityID)
  784. * townId 所在县区Id(townID)
  785. * address 地址
  786. * socialCreditCode 统一社会信用代码
  787. * businessLicense 营业执照(businessLicenseImage)
  788. * firstShopType 医疗=1和非医疗=2
  789. * secondShopType 医疗的二级分类 一类器械=1、二类器械 =2、三类器械=3、其他=4 /// 1和非医疗没有二级分类
  790. * mainProduct 主打项目(mainpro)
  791. * }
  792. * @param passWordConfirm 用户确认密码
  793. * @param smsCode 短信验证码(旧:activationCode)
  794. * @param isAgreed 是否同意勾选同意协议,1是,其他否
  795. * @param whichStep 注册步数: PC(0),小程序(1,2,3)
  796. * @param headers HttpHeaders
  797. * @return ShopPo
  798. */
  799. @Override
  800. @Transactional(rollbackFor = Exception.class)
  801. public ResponseJson shopRegister(ShopRegisterDto shopRegisterDto, String passWordConfirm, String smsCode, Integer isAgreed, Integer whichStep, HttpHeaders headers) {
  802. // 打印IP
  803. String ip = headers.getFirst("X-CLIENT-IP");
  804. log.info("供应商注册 X-CLIENT-IP : " + ip);
  805. // 参数校验
  806. if (StringUtils.isBlank(shopRegisterDto.getBindMobile())) {
  807. return ResponseJson.error("参数异常:企业绑定手机号不能为空!");
  808. }
  809. if (StringUtils.isBlank(shopRegisterDto.getPassword())) {
  810. return ResponseJson.error("参数异常:密码不能为空!");
  811. }
  812. if (StringUtils.isBlank(passWordConfirm)) {
  813. return ResponseJson.error("参数异常:确认密码不能为空!");
  814. }
  815. if (StringUtils.isBlank(smsCode)) {
  816. return ResponseJson.error("参数异常:短信验证码不能为空!");
  817. }
  818. if (!shopRegisterDto.getPassword().equals(passWordConfirm)) {
  819. return ResponseJson.error("两次输入的密码不一致");
  820. }
  821. // 手机号与验证码校验
  822. String result = commonService.mobileAndCodeValidate(shopRegisterDto.getBindMobile(), smsCode);
  823. if (result != null) {
  824. return ResponseJson.error(result, null);
  825. }
  826. // 小程序第一步校验完成
  827. if (1 == whichStep) {
  828. return ResponseJson.success(null);
  829. }
  830. if (StringUtils.isBlank(shopRegisterDto.getName())) {
  831. return ResponseJson.error("参数异常:公司名称不能为空!");
  832. }
  833. if (StringUtils.isBlank(shopRegisterDto.getLinkMan())) {
  834. return ResponseJson.error("参数异常:联系人不能为空!");
  835. }
  836. if (StringUtils.isNotEmpty(shopRegisterDto.getEmail())) {
  837. // 查找用户表是否存在相同邮箱
  838. Integer userIdByEmail = baseMapper.getUserIdByEmail(shopRegisterDto.getEmail());
  839. if (null != userIdByEmail && userIdByEmail > 0) {
  840. return ResponseJson.error("该邮箱已被使用");
  841. }
  842. }
  843. // 小程序第二步校验完成
  844. if (2 == whichStep) {
  845. return ResponseJson.success(null);
  846. }
  847. if (null == isAgreed || 1 != isAgreed) {
  848. return ResponseJson.error("请勾选同意协议");
  849. }
  850. // 获取ip所在地
  851. String ipAddress = "";
  852. try {
  853. ipAddress = IpUtil.recordIp(ip);
  854. } catch (IOException e) {
  855. e.printStackTrace();
  856. }
  857. log.info("ip所在地====》"+ipAddress);
  858. /*
  859. 组装用户数据 user
  860. */
  861. UserPo user = new UserPo();
  862. // 设置日期时间格式
  863. SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  864. String current = dateFormat.format(new Date());
  865. // 注册时间
  866. user.setRegisterTime(current);
  867. // 注册IP
  868. user.setRegisterIp(ip);
  869. // 注册IP所在地
  870. user.setIpAddress(ipAddress);
  871. // 注册来源: 0网站 1小程序
  872. user.setSource(shopRegisterDto.getSource());
  873. // 采美默认组织机构0
  874. user.setOrganizeId(0);
  875. // 密码
  876. user.setPassword(Md5Util.md5(shopRegisterDto.getPassword()));
  877. // 用户类型,供应商1,会员机构3,普通机构4
  878. user.setRegisterUserTypeId(1);
  879. // 组织名称
  880. user.setName(shopRegisterDto.getName());
  881. user.setUserName(shopRegisterDto.getShortName());
  882. // 绑定手机号
  883. user.setBindMobile(shopRegisterDto.getBindMobile());
  884. // 绑定邮箱
  885. user.setEmail(shopRegisterDto.getEmail());
  886. // 用户身份: 1协销 2会员机构 3供应商 4普通机构
  887. user.setUserIdentity(3);
  888. // 用户权限: 2会员机构 3供应商 4协销 5普通机构
  889. user.setUserPermission(3);
  890. // 供应商状态:90:已上线,91:已下线,92:审核不通过,3:待审核
  891. user.setManufacturerStatus(3);
  892. // 用户状态,1正常,0冻结
  893. user.setValidFlag(1);
  894. // 同意协议
  895. user.setAgreeFlag(isAgreed);
  896. registerMapper.insertShopUser(user);
  897. /*
  898. 组装供应商数据 shop
  899. */
  900. ShopPo shop = new ShopPo();
  901. // 绑定用户ID
  902. shop.setUserId(user.getUserId());
  903. // 供应商公司名称
  904. shop.setName(shopRegisterDto.getName());
  905. // 供应商公司简称
  906. shop.setShortName(shopRegisterDto.getShortName());
  907. // 联系人
  908. shop.setLinkMan(shopRegisterDto.getLinkMan());
  909. // 绑定手机号
  910. shop.setContractMobile(shopRegisterDto.getBindMobile());
  911. // 绑定邮箱
  912. shop.setContractEmail(shopRegisterDto.getEmail());
  913. // 绑定地址
  914. shop.setProvinceId(shopRegisterDto.getProvinceId());
  915. shop.setCityId(shopRegisterDto.getCityId());
  916. shop.setTownId(shopRegisterDto.getTownId());
  917. shop.setAddress(shopRegisterDto.getAddress());
  918. // 统一社会信用代码
  919. shop.setSocialCreditCode(shopRegisterDto.getSocialCreditCode());
  920. // 营业执照
  921. shop.setBusinessLicense(shopRegisterDto.getBusinessLicense());
  922. // 医疗=1和非医疗=2
  923. shop.setFirstShopType(shopRegisterDto.getFirstShopType());
  924. // 医疗的二级分类 一类器械=1、二类器械 =2、三类器械=3、其他=4 /// 1和非医疗没有二级分类
  925. shop.setSecondShopType(shopRegisterDto.getSecondShopType());
  926. // 主打项目
  927. shop.setMainProduct(shopRegisterDto.getMainProduct());
  928. // 主打系列商品说明
  929. shop.setMainProductDesc(shopRegisterDto.getMainProductDesc());
  930. // 公司介绍
  931. shop.setShopDesc(shopRegisterDto.getShopDesc());
  932. // 官网地址
  933. shop.setWebsite(shopRegisterDto.getWebsite());
  934. // 微信公众号
  935. shop.setWxOfficialAccount(shopRegisterDto.getWxOfficialAccount());
  936. // 微信小程序
  937. shop.setWxApplets(shopRegisterDto.getWxApplets());
  938. // 添加时间
  939. shop.setAddTime(current);
  940. // 是否可用,1可用
  941. shop.setValidFlag("1");
  942. // 供应商:90:已上线,91:已下线,92:审核不通过,3:待审核
  943. shop.setStatus(3);
  944. //如选择为医疗>>三类器械 则必须要上传资质
  945. shop.setMedicalPracticeLicenseImg1(shopRegisterDto.getMedicalPracticeLicense());
  946. /*
  947. 保存数据库 shop
  948. */
  949. int insertShopFlag = registerMapper.insertShop(shop);
  950. if (insertShopFlag < 1) {
  951. log.info(shop.getUserId() + " 插入数据库异常shop:" + shop.toString());
  952. return ResponseJson.error("插入数据库异常");
  953. }
  954. // user更新shopId
  955. user.setShopId(shop.getShopId());
  956. registerMapper.updateUserShopId(user.getUserId(), shop.getShopId());
  957. log.info("注册供应商---------userID:" + user.getUserId());
  958. return ResponseJson.success();
  959. }
  960. /**
  961. * @param shop ShopApplyDto
  962. * @param headers HttpHeaders
  963. * @return ShopPo
  964. */
  965. @Override
  966. @Transactional(rollbackFor = Exception.class)
  967. public ResponseJson updateShopApply(ShopApplyDto shop, HttpHeaders headers) {
  968. if (null == shop || null == shop.getUserId()) {
  969. return ResponseJson.error("参数异常:用户Id不能为空!");
  970. }
  971. if (null == shop.getShopId()) {
  972. return ResponseJson.error("参数异常:供应商Id不能为空!");
  973. }
  974. if (null == shop.getIsAgreed() || 1 != shop.getIsAgreed()) {
  975. return ResponseJson.error("请勾选同意协议");
  976. }
  977. if (StringUtils.isNotBlank(shop.getEmail())) {
  978. Integer userIdByEmail = baseMapper.getUserIdByEmail(shop.getEmail());
  979. if (null != userIdByEmail && userIdByEmail > 0 && !userIdByEmail.equals(shop.getUserId())) {
  980. return ResponseJson.error("该邮箱已被使用");
  981. }
  982. }
  983. // 更新用户数据 user
  984. UserPo user = new UserPo();
  985. user.setUserId(shop.getUserId());
  986. user.setUserName(shop.getShortName());
  987. user.setName(shop.getLinkMan());
  988. user.setEmail(shop.getEmail());
  989. user.setManufacturerStatus(3);
  990. // 更新供应商用户信息
  991. registerMapper.updateShopUserByApply(user);
  992. // 更新机构信息
  993. shop.setStatus(3);
  994. registerMapper.updateShopInfoByApply(shop);
  995. return ResponseJson.success("更新供应商申请信息成功", null);
  996. }
  997. /**
  998. * 引导升级后改变guideFlag状态
  999. *
  1000. * @param userId
  1001. */
  1002. @Override
  1003. public ResponseJson updateGuideFlag(Integer userId) {
  1004. if (userId == null) {
  1005. return ResponseJson.error("参数错误");
  1006. }
  1007. registerMapper.updateGuideFlagByUserId(userId);
  1008. return ResponseJson.success();
  1009. }
  1010. @Override
  1011. @Transactional(rollbackFor = Exception.class)
  1012. public ResponseJson<Integer> clubTemporary(ClubOnlineDto onlineDto) {
  1013. if (StringUtils.isNotBlank(onlineDto.getBusinessLicense())) {
  1014. // 邮箱验证
  1015. String emailCheck = commonService.emailValidate(onlineDto.getContractEmail());
  1016. if (emailCheck != null) {
  1017. return ResponseJson.error(emailCheck, null);
  1018. }
  1019. // 机构名称检查
  1020. String nameCheck = ValidateUtil.validateClubName(onlineDto.getName());
  1021. if (nameCheck != null) {
  1022. return ResponseJson.error(nameCheck, null);
  1023. }
  1024. if (onlineDto.getFirstClubType() == 1) {
  1025. // 医美分类
  1026. if (onlineDto.getSecondClubType() == null || StringUtils.isBlank(onlineDto.getMedicalPracticeLicense())) {
  1027. return ResponseJson.error("医美分类下参数异常,医美的二级分类为空或医疗执业许可证为空", null);
  1028. }
  1029. }
  1030. }
  1031. // 手机号验证
  1032. String result = commonService.mobileAndCodeValidate(onlineDto.getBindMobile(), null);
  1033. if (result != null) {
  1034. return ResponseJson.error(result, null);
  1035. }
  1036. registerMapper.insertClubTemporary(onlineDto);
  1037. return ResponseJson.success(onlineDto.getUserId());
  1038. }
  1039. @Override
  1040. public ResponseJson<ClubTemporaryVo> temporaryData(Integer id) {
  1041. ClubTemporaryVo clubTemporary = registerMapper.getTemporary(id);
  1042. if (clubTemporary == null) {
  1043. return ResponseJson.error("用户资料不存在", null);
  1044. }
  1045. if (null != clubTemporary.getTownId()) {
  1046. TownVo town = baseMapper.getTown(clubTemporary.getTownId());
  1047. CityVo city = baseMapper.getCity(town.getCityId());
  1048. ProvinceVo province = baseMapper.getProvince(city.getProvinceId());
  1049. clubTemporary.setProvincialAddress(province.getName() + "" + city.getName() + "" + town.getName());
  1050. }
  1051. return ResponseJson.success(clubTemporary);
  1052. }
  1053. /**
  1054. * 采美豆买超级会员
  1055. */
  1056. @Transactional(rollbackFor = Exception.class)
  1057. @Override
  1058. public ResponseJson superVipUpByBeans(Integer userId, Integer packageId, HttpHeaders headers) {
  1059. Integer clubId = messageCenterMapper.clubIdCule(userId);
  1060. SuperVipDto endFlag = findEnd(userId);
  1061. Integer userBeans = vipMapper.findUserBeans(userId);
  1062. VipPackage pac = vipMapper.findUserPackage(packageId);
  1063. //过期和没买过都是生效时间重置,到期时间=现在+套餐时间
  1064. if (endFlag.getVipFlag() == 0 || endFlag.getVipFlag() == -1) {
  1065. //1.查用户采美豆,够就用采美豆下单,不够就返回信息
  1066. if (Double.valueOf(userBeans) >= (pac.getPrice() * pac.getProportion())) {
  1067. //用户采美豆>=套餐需要的采美豆,调用采美豆支付方法
  1068. //传空表示新客户
  1069. beanPay(userId, packageId, null, endFlag.getVipFlag());
  1070. //推送站内消息
  1071. if (clubId != null) {
  1072. //推送信息中心-账户通知
  1073. SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  1074. String current = dateFormat.format(new Date());
  1075. //1.日期格式
  1076. log.info("输出间隔月份----------->", pac.getDuration());
  1077. MessageCenter messageCenter = new MessageCenter();
  1078. messageCenter.setShopId(null);
  1079. messageCenter.setClubId(clubId);
  1080. messageCenter.setUserType(1);
  1081. messageCenter.setMessageType(2);
  1082. messageCenter.setAccountType(2);
  1083. messageCenter.setContent(pac.getDuration() + "个月");
  1084. messageCenter.setTime(current);
  1085. messageCenterMapper.addMessageCenter(messageCenter);
  1086. try {
  1087. log.info("***********会员充值微信公众号推送************");
  1088. String accessToken = weChatService.getAccessToken();
  1089. String unionId=messageCenterMapper.UnionIdList(userId);
  1090. String openid = messageCenterMapper.getOpenidListByPermission(unionId);
  1091. String title="恭喜您成为采美商城超级会员";
  1092. String name=pac.getDuration() + "个月";
  1093. Double price=pac.getPrice();
  1094. String date="30";
  1095. String time = current;
  1096. String remarkText = "如在使用中有任何疑问,请在小程序内联系在线客服";
  1097. // 跳转到【小程序付款-选择支付方式页面】
  1098. String pagePath = "/pages/user/member/member";
  1099. // sendTemplateMsg(openid, 标题, 金额, 收款日期, 备注, 跳转链接
  1100. log.error("获取openid>>>>>" + openid);
  1101. weChatService.sendTemplateMsgs(accessToken, openid,title,name,price,date,remarkText, pagePath);
  1102. } catch (Exception e) {
  1103. log.error("【会员充值微信通知】获取微信公众号access_token异常!", e);
  1104. }
  1105. }
  1106. return ResponseJson.success("支付采美豆购买成功");
  1107. }
  1108. return ResponseJson.error("用户采美豆不足", null);
  1109. } else {
  1110. if (Double.valueOf(userBeans) >= (pac.getPrice() * pac.getProportion())) {
  1111. //续费生效时间不变,原到期时间+套餐时间
  1112. beanPay(userId, packageId, endFlag.getEndTime(), endFlag.getVipFlag());
  1113. //推送站内消息
  1114. if (clubId != null) {
  1115. //推送信息中心-账户通知
  1116. SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  1117. String current = dateFormat.format(new Date());
  1118. //1.日期格式
  1119. log.info("输出间隔月份----------->", pac.getDuration());
  1120. MessageCenter messageCenter = new MessageCenter();
  1121. messageCenter.setShopId(null);
  1122. messageCenter.setClubId(clubId);
  1123. messageCenter.setUserType(1);
  1124. messageCenter.setMessageType(2);
  1125. messageCenter.setAccountType(2);
  1126. messageCenter.setContent(pac.getDuration() + "个月");
  1127. messageCenter.setTime(current);
  1128. messageCenterMapper.addMessageCenter(messageCenter);
  1129. try {
  1130. log.info("***********会员续费微信公众号推送************");
  1131. String accessToken = weChatService.getAccessToken();
  1132. String unionId = messageCenterMapper.UnionIdList(userId);
  1133. String openid = messageCenterMapper.getOpenidListByPermission(unionId);
  1134. String date = current;
  1135. String remarkText = "如在使用中有任何疑问,请在小程序内联系在线客服";
  1136. // 跳转到【小程序付款-选择支付方式页面】
  1137. String pagePath = "/pages/user/member/member";
  1138. // sendTemplateMsg(openid, 标题, 金额, 收款日期, 备注, 跳转链接
  1139. log.error("获取openid>>>>>" + openid);
  1140. weChatService.sendTemplateMsg(accessToken, openid, date, remarkText, pagePath);
  1141. } catch (Exception e) {
  1142. log.error("【会员充值微信通知】获取微信公众号access_token异常!", e);
  1143. }
  1144. }
  1145. return ResponseJson.success("支付采美豆购买成功");
  1146. }
  1147. return ResponseJson.error("用户采美豆不足", null);
  1148. }
  1149. }
  1150. /**
  1151. * 在线支付开通超级会员
  1152. *
  1153. * @param userId
  1154. * @param packageId
  1155. * @param headers
  1156. */
  1157. @Override
  1158. public ResponseJson<Integer> superVipUpByPay(Integer userId, Integer packageId, HttpHeaders headers) {
  1159. SuperVipDto endFlag = findEnd(userId);
  1160. VipPackage pac = vipMapper.findUserPackage(packageId);
  1161. if (null == pac) {
  1162. return ResponseJson.error("超级会员套餐不存在!", null);
  1163. }
  1164. Calendar cal = Calendar.getInstance();
  1165. Date beginTime = new Date();
  1166. if (null != endFlag.getVipFlag() && 1 == endFlag.getVipFlag()) {
  1167. // 有效期内续费
  1168. beginTime = endFlag.getEndTime();
  1169. }
  1170. cal.setTime(beginTime);
  1171. cal.add(Calendar.MONTH, pac.getDuration());
  1172. // 查询未支付的当前超级会员套餐购买记录
  1173. Integer dbHistoryId = vipMapper.getVipHistoryId(userId, packageId);
  1174. //userId, packageId, beginTime, endTime, payStatus, payWay, payType, price, userBeans, payTime
  1175. VipPayHistoryPo payHistory = new VipPayHistoryPo();
  1176. payHistory.setUserBeans(0d);
  1177. payHistory.setUserId(userId);
  1178. payHistory.setPackageId(packageId);
  1179. payHistory.setBeginTime(beginTime);
  1180. payHistory.setEndTime(cal.getTime());
  1181. // 支付状态 0 未付款 1 已付款
  1182. payHistory.setPayStatus(0);
  1183. // 线上支付
  1184. payHistory.setPayWay(1);
  1185. payHistory.setPrice(pac.getPrice());
  1186. if (null != dbHistoryId && dbHistoryId > 0) {
  1187. payHistory.setId(dbHistoryId);
  1188. // 更新未支付的当前超级会员购买记录
  1189. vipMapper.updatePayHistory(payHistory);
  1190. } else {
  1191. // 新增超级会员购买记录
  1192. vipMapper.addPayHistory(payHistory);
  1193. }
  1194. if (payHistory.getId() > 0) {
  1195. return ResponseJson.success(payHistory.getId());
  1196. }
  1197. return ResponseJson.error("支付开通超级会员异常!", null);
  1198. }
  1199. /**
  1200. * 根据userId查是否过期,返回dto对象,flag=0未买过,-1过期,1有效,endTime过期时间
  1201. */
  1202. private SuperVipDto findEnd(Integer userId) {
  1203. SuperVipPo superVip = vipMapper.findSuperVip(userId);
  1204. SuperVipDto superVipDto = new SuperVipDto();
  1205. Integer clubId = messageCenterMapper.clubIdCule(userId);
  1206. if (superVip == null) {
  1207. superVipDto.setVipFlag(0);
  1208. } else {
  1209. SuperVipPo endTime = vipMapper.findEndTime(userId);
  1210. if (endTime == null) {
  1211. superVipDto.setVipFlag(-1);
  1212. superVipDto.setEndTime(superVip.getEndTime());
  1213. } else {
  1214. superVipDto.setVipFlag(1);
  1215. superVipDto.setEndTime(endTime.getEndTime());
  1216. }
  1217. }
  1218. return superVipDto;
  1219. }
  1220. /**
  1221. * 支付采美豆买会员
  1222. * flag=0未买过,-1过期,1有效,endTime过期时间
  1223. *
  1224. * @param
  1225. * @param beginTime
  1226. */
  1227. private void beanPay(Integer userId, Integer packageId, Date beginTime, Integer repayFlag) {
  1228. String message = "";
  1229. //1.user表扣豆子
  1230. VipPackage pac = vipMapper.findUserPackage(packageId);
  1231. Integer userBeans = vipMapper.findUserBeans(userId);
  1232. BigDecimal b1 = BigDecimal.valueOf(pac.getPrice());
  1233. BigDecimal b2 = BigDecimal.valueOf(pac.getProportion());
  1234. BigDecimal b3 = BigDecimal.valueOf(userBeans);
  1235. BigDecimal multiply = b1.multiply(b2);
  1236. BigDecimal subtract = b3.subtract(multiply);
  1237. String strs = strs(subtract.toString());
  1238. String strs1 = strs(multiply.toString());
  1239. //b3已有豆子-b1价格*b2比例
  1240. Integer integer = Integer.valueOf(strs);
  1241. vipMapper.updateUserBeans(userId, integer);
  1242. //采美豆消费表记录消费
  1243. vipMapper.addUserBeansHistory(userId, Integer.valueOf(strs1));
  1244. Calendar cal = Calendar.getInstance();
  1245. if (repayFlag == 0) {
  1246. SuperVipPo superVip = new SuperVipPo();
  1247. //到期时间now
  1248. beginTime = new Date();
  1249. superVip.setPrice(pac.getPrice());
  1250. superVip.setPackageId(packageId);
  1251. superVip.setBeginTime(beginTime);
  1252. superVip.setUpdateTime(beginTime);
  1253. superVip.setDelFlag(0);
  1254. superVip.setUserId(userId);
  1255. //计算存svip表的到期时间
  1256. cal.setTime(beginTime);
  1257. Integer userPackageTime = vipMapper.findUserPackageTime(packageId);
  1258. cal.add(Calendar.MONTH, userPackageTime);
  1259. superVip.setEndTime(cal.getTime());
  1260. //2.超级会员表更改,重买标记是0生效时间就是now
  1261. vipMapper.addVip(superVip);
  1262. //购买记录表加数据
  1263. superVip.setPayStatus(1);
  1264. superVip.setPayWay(4);
  1265. //新会员开通,开始时间作为历史表的本次购买套餐的开始时间
  1266. setHistory(superVip, beginTime);
  1267. //发短信
  1268. String shortLink = getShortLink(8, 2, "https://www.caimei365.com/user/member.html?userId=" + userId);
  1269. message = "恭喜您成功开通采美平台超级会员,为期" + userPackageTime + "个月,快戳采美网站链接 www.caimei365.com/t/" + shortLink + "或微信搜索“采美采购商城”小程序登录采美平台畅享会员特权吧。关注公众号“采美365网”可获取更多优惠和精彩资讯。退订回T";
  1270. String mobile = vipMapper.findMobile(userId);
  1271. if (mobile != null && mobile != "") {
  1272. remoteCallService.remoteSendSms(2, 1, mobile, message);
  1273. }
  1274. } else if (repayFlag == 1) {
  1275. //有效期内续费
  1276. SuperVipPo superVip = vipMapper.findSuperVip(userId);
  1277. superVip.setUpdateTime(new Date());
  1278. superVip.setPackageId(packageId);
  1279. superVip.setPrice(pac.getPrice());
  1280. //续费加时间
  1281. cal.setTime(beginTime);
  1282. Integer userPackageTime = vipMapper.findUserPackageTime(packageId);
  1283. cal.add(Calendar.MONTH, userPackageTime);
  1284. superVip.setEndTime(cal.getTime());
  1285. //vip表改到期时间
  1286. vipMapper.updateVip(superVip);
  1287. //购买记录表加数据
  1288. superVip.setPayStatus(1);
  1289. superVip.setPayWay(4);
  1290. //需费时历史记录开始时间为svipuser改变前的终止时间
  1291. setHistory(superVip, beginTime);
  1292. //发短信
  1293. String shortLink = getShortLink(8, 2, "https://www.caimei365.com/user/member.html?userId=" + userId);
  1294. message = "恭喜您成功续费采美平台超级会员,为期" + userPackageTime + "个月,快戳采美网站链接 www.caimei365.com/t/" + shortLink + "或微信搜索“采美采购商城”小程序登录采美平台畅享会员特权吧。关注公众号“采美365网”可获取更多优惠和精彩资讯。退订回T";
  1295. String mobile = vipMapper.findMobile(userId);
  1296. if (mobile != null && mobile != "") {
  1297. remoteCallService.remoteSendSms(2, 3, mobile, message);
  1298. }
  1299. } else if (repayFlag == -1) {
  1300. //过期续费
  1301. SuperVipPo superVip = vipMapper.findSuperVip(userId);
  1302. superVip.setPackageId(packageId);
  1303. superVip.setPrice(pac.getPrice());
  1304. //重设生效起始时间
  1305. beginTime = new Date();
  1306. superVip.setUpdateTime(beginTime);
  1307. superVip.setBeginTime(beginTime);
  1308. //到期时间现在时间+套餐时间
  1309. cal.setTime(beginTime);
  1310. Integer userPackageTime = vipMapper.findUserPackageTime(packageId);
  1311. cal.add(Calendar.MONTH, userPackageTime);
  1312. superVip.setEndTime(cal.getTime());
  1313. //vip表改到期时间
  1314. vipMapper.updateVip(superVip);
  1315. //购买记录表加数据
  1316. superVip.setPayStatus(1);
  1317. superVip.setPayWay(4);
  1318. //过期再买,历史表开始时间是现在时间/支付时间
  1319. setHistory(superVip, beginTime);
  1320. //发短信 "https://www-b.caimei365.com/user/member.html?userId=" + userId
  1321. String shortLink = getShortLink(8, 2, "https://www.caimei365.com/user/member.html?userId=" + userId);
  1322. message = "恭喜您成功续费采美平台超级会员,为期" + userPackageTime + "个月,快戳采美网站链接 www.caimei365.com/t/" + shortLink + "或微信搜索“采美采购商城”小程序登录采美平台畅享会员特权吧。关注公众号“采美365网”可获取更多优惠和精彩资讯。退订回T";
  1323. String mobile = vipMapper.findMobile(userId);
  1324. if (mobile != null && mobile != "") {
  1325. remoteCallService.remoteSendSms(2, 3, mobile, message);
  1326. }
  1327. }
  1328. log.info(userId + "消费采美豆" + multiply + "会员到期时间至" + cal.getTime());
  1329. }
  1330. /**
  1331. * 增加sviphistory记录
  1332. */
  1333. private void setHistory(SuperVipPo vip, Date beginTime) {
  1334. Calendar cal = Calendar.getInstance();
  1335. VipPayHistoryPo payHistory = new VipPayHistoryPo();
  1336. VipPackage pac = vipMapper.findUserPackage(vip.getPackageId());
  1337. payHistory.setUserId(vip.getUserId());
  1338. payHistory.setUserBeans(vip.getPrice() * pac.getProportion());
  1339. payHistory.setPayTime(vip.getUpdateTime());
  1340. payHistory.setPayStatus(vip.getPayStatus());
  1341. payHistory.setPayWay(vip.getPayWay());
  1342. payHistory.setPackageId(vip.getPackageId());
  1343. payHistory.setPrice(0.00);
  1344. //开始时间是上一次的结束时间,结束时间是cal+这次买的时间
  1345. payHistory.setBeginTime(beginTime);
  1346. cal.setTime(beginTime);
  1347. cal.add(Calendar.MONTH, pac.getDuration());
  1348. payHistory.setEndTime(cal.getTime());
  1349. vipMapper.addPayHistory(payHistory);
  1350. }
  1351. // public boolean sendSms(int markId, String mobile, String message) {
  1352. // AtomicBoolean returnValue = new AtomicBoolean(false);
  1353. // try {
  1354. // //测试环境手机号允许发短信
  1355. // List<String> list = new ArrayList<>();
  1356. // list.add("15917362709");
  1357. // list.add("15814011616");
  1358. // list.add("13100721916");
  1359. // list.add("15113936829");
  1360. // list.add("15827317748");
  1361. // if ("prod".equals(profile) || list.contains(mobile)) {
  1362. // if (StringUtils.isNotBlank(mobile) && mobile.length() == 11) {
  1363. // String regex = "^(1[3-9]\\d{9}$)";
  1364. // Pattern pattern = Pattern.compile(regex);
  1365. // Matcher matcher = pattern.matcher(mobile);
  1366. // if (matcher.matches()) {
  1367. // // 调用 ToolsFeign 发送短信
  1368. // String jsonStr = smsFeign.getSendSms(mobile, message);
  1369. // JSONObject parseObject = JSONObject.parseObject(jsonStr);
  1370. // if (0 == parseObject.getInteger("code")) {
  1371. // // 保存短信发送条数+count
  1372. // messagePushMapper.updateSmsSendCount(markId, 1);
  1373. // returnValue.set(true);
  1374. // }
  1375. // }
  1376. // }
  1377. // }
  1378. // } catch (Exception e) {
  1379. // log.error("短信推送异常:", e);
  1380. // }
  1381. // return returnValue.get();
  1382. // }
  1383. private static String strs(String str) {
  1384. if (str.indexOf(".") > 0) {
  1385. str = str.replaceAll("0+?$", "");//删掉尾数为0的字符
  1386. str = str.replaceAll("[.]$", "");//结尾如果是小数点,则去掉
  1387. }
  1388. return str;
  1389. }
  1390. public String getShortLink(int length, int markId, String url) {
  1391. String shortLink = RandomCodeGenerator.generateShortLink(length);
  1392. Integer id = vipMapper.findBYShortLink(shortLink);
  1393. if (id != null && id > 0) {
  1394. getShortLink(length, markId, url);
  1395. }
  1396. vipMapper.insertShortLink(markId, shortLink, url);
  1397. return shortLink;
  1398. }
  1399. // public static void main(String[] args) throws ParseException {
  1400. // Date d=new Date();
  1401. // //1.日期格式
  1402. // SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
  1403. //
  1404. // //2.某天的日期
  1405. // Date da1=sdf.parse("2022-01-01 03:30:16");
  1406. // Long s=(d.getTime()-da1.getTime())/24/60/60/30/1000;
  1407. // //3.输出间隔天数 getTime获取的是毫秒
  1408. // System.out.println(s);
  1409. // }
  1410. }