ruoyi-api/ruoyi-api-goods/src/main/java/com/ruoyi/goods/api/domain/TLotteryEvent.java
@@ -110,6 +110,12 @@ @ApiModelProperty("详情介绍") private String activityContent; /** * 微信小程序二维码 */ @TableField("wx_mini_program_qr_code") @ApiModelProperty("微信小程序二维码") private String wxMiniProgramQrCode; /** * 删除标记 */ @TableField("del_flag") ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteMemberFallbackFactory.java
@@ -181,6 +181,11 @@ public R editMember(Member member) { return R.fail("修改会员失败:" + throwable.getMessage()); } @Override public String getWeiXinQrCode(String scene, String path) { return null; } }; } } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteMemberService.java
@@ -302,4 +302,15 @@ */ @PostMapping("/member/editMember") R editMember(@RequestBody Member member); /** * 获取微信二维码 * * @param scene * @param path * @return */ @PostMapping("/member/getWeiXinQrCode") public String getWeiXinQrCode(@RequestParam("scene") String scene, @RequestParam("path") String path); } ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/business/MerLotteryEventController.java
@@ -19,6 +19,7 @@ import com.ruoyi.goods.service.lottery.IUserLotteryEventService; import com.ruoyi.system.api.domain.poji.goods.Goods; import com.ruoyi.system.api.domain.poji.shop.Shop; import com.ruoyi.system.api.service.RemoteMemberService; import com.ruoyi.system.api.service.RemoteShopService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -56,8 +57,8 @@ @Resource private GoodsService goodsService; // @Resource // private WxMaService wxMaService; @Resource private RemoteMemberService remoteMemberService; @RequestMapping(value = "/getShopLotteryDrawList", method = RequestMethod.POST) @@ -115,6 +116,8 @@ public R editShopLotteryDraw(@RequestBody TLotteryEvent lotteryEvent) { if (lotteryEvent.getId() == null) { lotteryEvent.setId(IdUtils.simpleUUID()); String weiXinQrCode = remoteMemberService.getWeiXinQrCode("id=" + lotteryEvent.getId() + "&activityType=" + lotteryEvent.getActivityType(), "/pages/turntable/index"); lotteryEvent.setWxMiniProgramQrCode(weiXinQrCode); } lotteryEvent.setUpdateTime(LocalDateTime.now()); lotteryEvent.setUpdateUserId(SecurityUtils.getUserId()); ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/ShopLotteryDrawListVo.java
@@ -21,4 +21,6 @@ private String startTime; @ApiModelProperty("抽奖结束时间") private String endTime; @ApiModelProperty("微信小程序二维码") private String wxMiniProgramQrCode; } ruoyi-modules/ruoyi-goods/src/main/resources/mapper/lottery/LotteryEventMapper.xml
@@ -34,7 +34,8 @@ activity_profile as activityProfile, cover_image as coverImage, DATE_FORMAT(start_time, '%Y-%m-%d %H:%i') as startTime, DATE_FORMAT(end_time, '%Y-%m-%d %H:%i') as endTime DATE_FORMAT(end_time, '%Y-%m-%d %H:%i') as endTime, wx_mini_program_qr_code as wxMiniProgramQrCode from t_lottery_event where del_flag == 0 and shop_id = #{shopId} order by create_time desc ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/console/MemberController.java
@@ -413,4 +413,17 @@ memberGiftRecordService.save(memberGiftRecord); return R.ok(); } /** * 获取微信二维码 * * @param scene * @param path * @return */ @PostMapping("/getWeiXinQrCode") public String getWeiXinQrCode(@RequestParam("scene") String scene, @RequestParam("path") String path) { return memberService.getWeiXinQrCode(scene, path); } } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/miniapp/AppCouponController.java
@@ -115,8 +115,10 @@ vo.setDiscountMoney(coupon.getDiscountMoney()); vo.setValidType(coupon.getValidTimeType()); vo.setValidDays(coupon.getValidDay()); if (2 != coupon.getValidTimeType()) { vo.setValidStartTime(sdf.format(coupon.getValidStartTime())); vo.setValidEndTime(sdf.format(coupon.getValidEndTime())); } vo.setPropagandaPoster(coupon.getPropagandaPoster()); vo.setUseGoods(""); //构建特定商品数据 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java
@@ -1,4 +1,5 @@ package com.ruoyi.member.service.impl.member; import cn.binarywang.wx.miniapp.api.WxMaService; import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult; import com.alibaba.fastjson.JSONObject; @@ -8,15 +9,11 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.google.common.collect.Lists; import com.ruoyi.common.core.constant.Constants; import com.ruoyi.common.core.constant.SecurityConstants; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.utils.DateUtils; import com.ruoyi.common.core.utils.JwtUtils; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.utils.bean.BeanUtils; import com.ruoyi.common.core.utils.ip.IpUtils; import com.ruoyi.common.core.utils.uuid.IdUtils; import com.ruoyi.common.redis.service.RedisService; import com.ruoyi.common.security.service.TokenService; @@ -41,22 +38,25 @@ import com.ruoyi.system.api.domain.poji.config.SysTag; import com.ruoyi.system.api.domain.poji.member.Member; import com.ruoyi.system.api.domain.poji.shop.Shop; import com.ruoyi.system.api.domain.poji.sys.SysFile; import com.ruoyi.system.api.domain.poji.sys.SysUser; import com.ruoyi.system.api.domain.vo.*; import com.ruoyi.system.api.model.AppMiniLoginDto; import com.ruoyi.system.api.model.AppMiniLoginVo; import com.ruoyi.system.api.model.LoginUser; import com.ruoyi.system.api.service.RemoteConfigService; import com.ruoyi.system.api.service.RemoteOrderService; import com.ruoyi.system.api.service.RemoteShopService; import com.ruoyi.system.api.service.RemoteUserService; import com.ruoyi.system.api.service.*; import io.jsonwebtoken.lang.Assert; import lombok.extern.log4j.Log4j2; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.ArrayUtils; import org.apache.http.HttpResponse; import org.apache.http.util.EntityUtils; import org.springframework.stereotype.Service; import org.springframework.util.FileCopyUtils; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Nullable; import javax.annotation.Resource; import java.io.*; import java.math.BigDecimal; import java.time.LocalDate; import java.time.format.DateTimeFormatter; @@ -125,6 +125,9 @@ @Resource private TokenService tokenService; @Resource private RemoteFileService remoteFileService; /** @@ -294,24 +297,6 @@ appUserRegisterVo.setOpenid(member.getMiniOpenid()); appUserRegisterVo.setUnionid(member.getWxUnionid()); appUserRegisterVo.setSysUser(sysUser); LoginUser loginUser = new LoginUser(); // Jwt存储信息 Map<String, Object> claimsMap = new HashMap<String, Object>(); loginUser.setSysUser(sysUser); String token = IdUtils.fastUUID(); Long userId = loginUser.getSysUser().getUserId(); String userName = loginUser.getSysUser().getUserName(); loginUser.setToken(token); loginUser.setUserid(userId); loginUser.setUsername(userName); loginUser.setIpaddr(IpUtils.getIpAddr()); tokenService.refreshToken(loginUser); claimsMap.put(SecurityConstants.USER_KEY, token); claimsMap.put(SecurityConstants.DETAILS_USER_ID, userId); claimsMap.put(SecurityConstants.DETAILS_USERNAME, userName); claimsMap.put(SecurityConstants.LOGIN_FROM, Constants.FROM_MINI_APP); appUserRegisterVo.setToken(JwtUtils.createToken(claimsMap)); return appUserRegisterVo; } @@ -2320,4 +2305,72 @@ memberTotalService.saveOrUpdate(memberTotal); return R.ok(); } @Override public String getWeiXinQrCode(String scene, String path) { try { File file = wxMaService.getQrcodeService().createWxaCodeUnlimit(scene, path); FileInputStream input = new FileInputStream(file); MultipartFile multipartFile = new MyMultipartFile("file", file.getName(), "text/plain", IOUtils.toByteArray(input)); SysFile sysFile = remoteFileService.upload(multipartFile).getData(); return sysFile.getUrl(); } catch (Exception e) { e.printStackTrace(); } return null; } public class MyMultipartFile implements MultipartFile { private final String name; private final byte[] content; private String originalFilename; @Nullable private String contentType; public MyMultipartFile(String name, @Nullable String originalFilename, @Nullable String contentType, @Nullable byte[] content) { Assert.hasLength(name, "Name must not be null"); this.name = name; this.originalFilename = originalFilename != null ? originalFilename : ""; this.contentType = contentType; this.content = content != null ? content : new byte[0]; } public String getName() { return this.name; } public String getOriginalFilename() { return this.originalFilename; } @Nullable public String getContentType() { return this.contentType; } public boolean isEmpty() { return this.content.length == 0; } public long getSize() { return (long) this.content.length; } public byte[] getBytes() throws IOException { return this.content; } public InputStream getInputStream() throws IOException { return new ByteArrayInputStream(this.content); } public void transferTo(File dest) throws IOException, IllegalStateException { FileCopyUtils.copy(this.content, dest); } } } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberService.java
@@ -400,4 +400,9 @@ * @return */ R addIntegralRecord(Integer integral, Long userId, String orderId); /** * 获取微信二维码 */ String getWeiXinQrCode(String scene, String path); } ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/miniapp/AppHomeController.java
@@ -91,14 +91,14 @@ @ApiOperation(value = "门店详情预约操作【2.0】") public R appointmentTime(@RequestBody AppointmentTimeDto dto) { TShopAppointableTime one = shopAppointableTimeService.getOne(new LambdaQueryWrapper<TShopAppointableTime>().eq(TShopAppointableTime::getShopId, dto.getShopId()) .last(" and DATE_FORMAT(appointment_time, '%Y-%m-%d %H:%i') = '" + dto.getTime() + "'")); .last(" and DATE_FORMAT(appointment_time, '%Y-%m-%d %H:%i:%s') = '" + dto.getTime() + "'")); if (null != one) { return R.fail("不能重复预约"); } Long userId = SecurityUtils.getUserId(); one = new TShopAppointableTime(); one.setShopId(dto.getShopId()); one.setAppointmentTime(LocalDateTime.parse(dto.getTime(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"))); one.setAppointmentTime(LocalDateTime.parse(dto.getTime(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); one.setUserId(userId); one.setStatus(1); one.setCreateTime(LocalDateTime.now());