Browse Source

获取优惠券

guoshuai 2 weeks ago
parent
commit
d11da8e776

+ 17 - 13
src/main/java/com/qmrb/system/controller/CaSignController.java

@@ -2395,20 +2395,24 @@ public class CaSignController {
 //            String signUrl = (String)redisTemplate.opsForValue().get(deviceNo);
 
             // 生成token
-            List<SimpleGrantedAuthority> roleList = userService.getUserAuthInfo(contract.getUsername()).getRoles()
-                    .stream().map(role -> new SimpleGrantedAuthority("ROLE_" + role)).toList();
-            UsernamePasswordAuthenticationToken authenticationToken =
-                    new UsernamePasswordAuthenticationToken(contract.getUsername(), contract.getPassword(),
-                            roleList);
-            UserAuthInfo userAuthInfo = userService.getUserAuthInfo(contract.getUsername());
-            SysUserDetails sysUserDetails = new SysUserDetails(userAuthInfo);
-            authenticationToken.setDetails(sysUserDetails);
-            SecurityContextHolder.getContext().setAuthentication(authenticationToken);
-            String accessToken = jwtTokenManager.createToken(authenticationToken);
+            // List<SimpleGrantedAuthority> roleList = userService.getUserAuthInfo(contract.getUsername()).getRoles()
+            //         .stream().map(role -> new SimpleGrantedAuthority("ROLE_" + role)).toList();
+            // UsernamePasswordAuthenticationToken authenticationToken =
+            //         new UsernamePasswordAuthenticationToken(contract.getUsername(), contract.getPassword(),
+            //                 roleList);
+            // UserAuthInfo userAuthInfo = userService.getUserAuthInfo(contract.getUsername());
+            // SysUserDetails sysUserDetails = new SysUserDetails(userAuthInfo);
+            // authenticationToken.setDetails(sysUserDetails);
+            // SecurityContextHolder.getContext().setAuthentication(authenticationToken);
+            // String accessToken = jwtTokenManager.createToken(authenticationToken);
             // 保存token至redis中
-           String tokenId =  SecurityConstants.CONTRACT_TOKEN_CACHE_PREFIX + user.getId() + UUID.randomUUID();
-            redisTemplate.opsForValue().set(tokenId,accessToken,overDue,TimeUnit.SECONDS);
-            String url = contract.getQrcodeLoginUrl() + "?tokenId=" + tokenId;
+            // String contractId =  SecurityConstants.CONTRACT_TOKEN_CACHE_PREFIX + user.getId() + UUID.randomUUID();
+            
+            // String encrypt = AesUtils.encrypt(contract.getId().toString(), CaConstants.serverSecret);
+            UUID uuid = UUID.randomUUID();
+            redisTemplate.opsForValue().set(uuid,contract.getId(),overDue,TimeUnit.SECONDS);
+            // String url = contract.getQrcodeLoginUrl() + "?tokenId=" + tokenId;
+            String url = contract.getQrcodeLoginUrl() + "?contractId=" + uuid;
             // byte[] imageBytes = QRCodeUtil.createQrCodeToByte(url);
             String base64 = QRCodeUtil.createCodeToOutputStream(url);
             // HttpHeaders headers = new HttpHeaders();

+ 1 - 1
src/main/java/com/qmrb/system/controller/CouponController.java

@@ -45,7 +45,7 @@ import jakarta.validation.Valid;
  */
 @Tag(name = "优惠券表接口")
 @RestController
-@RequestMapping("/api/v1/")
+@RequestMapping("/api/v1/coupon")
 @CrossOrigin
 public class CouponController{
 

+ 6 - 0
src/main/java/com/qmrb/system/pojo/form/CouponForm.java

@@ -26,6 +26,12 @@ public class CouponForm {
      */
 	@Schema(description = "受赠用户ID",type="Long")
     private Long toUserId;
+    
+    /**
+     * 加密协议id
+     */
+	@Schema(description = "加密协议id",type="Long")
+    private String contractIdEnc;
     /**
      * 发放者ID
      */

+ 5 - 1
src/main/java/com/qmrb/system/service/impl/ContractServiceImpl.java

@@ -98,14 +98,18 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract> i
         user.setUsername(form.getUsername());
         user.setPassword(form.getPassword());
         user.setContractId(entity.getId());
+        List<SysRole> roles = null;
         if (form.getMaxParkingLotNum() != null) {
             user.setUserType("3");// 用户类型 1 系统用户 2扫码协议用户  3包租协议用户
+            roles = roleService.list(new LambdaQueryWrapper<SysRole>().eq(SysRole::getCode, "BZ_CONTRACT"));// 协议用户角色
+
         } else {
             user.setUserType("2");// 用户类型 1 系统用户 2扫码协议用户  3包租协议用户
+            roles = roleService.list(new LambdaQueryWrapper<SysRole>().eq(SysRole::getCode, "SCAN_CONTRACT"));// 协议用户角色
+
         }
         user.setMobile(form.getContactPhone());
         user.setNickname(form.getContractName());
-        List<SysRole> roles = roleService.list(new LambdaQueryWrapper<SysRole>().eq(SysRole::getCode, "CONTRACT"));// 协议用户角色
         if (CollectionUtil.isNotEmpty(roles)) {
             List<Long> roleIds = roles.stream().map(item -> {
                 return item.getId();

+ 53 - 0
src/main/java/com/qmrb/system/service/impl/CouponServiceImpl.java

@@ -1,11 +1,20 @@
 package com.qmrb.system.service.impl;
 
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.Set;
 import java.util.stream.Collectors;
 
+import com.qmrb.system.common.util.AesUtils;
+import com.qmrb.system.framework.security.CaConstants;
+import com.qmrb.system.framework.security.util.SecurityUtils;
+import com.qmrb.system.pojo.entity.Contract;
+import com.qmrb.system.pojo.entity.SysUser;
+import com.qmrb.system.service.IContractService;
+import com.qmrb.system.service.SysUserService;
+import com.qmrb.system.service.UserService;
 import org.springframework.beans.factory.annotation.Autowired;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -19,6 +28,7 @@ import com.qmrb.system.pojo.query.CouponQuery;
 import com.qmrb.system.mapper.CouponMapper;
 import com.qmrb.system.service.ICouponService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 
 import cn.hutool.core.collection.CollectionUtil;
@@ -26,6 +36,8 @@ import cn.hutool.core.util.StrUtil;
 import cn.hutool.core.lang.Assert;
 import jakarta.validation.Valid;
 
+import javax.swing.*;
+
 /**
  * <p>
  * 优惠券表 服务实现类
@@ -39,6 +51,15 @@ public class CouponServiceImpl extends ServiceImpl<CouponMapper, Coupon> impleme
 
 	@Autowired
 	private CouponConverter converter;
+	
+	@Autowired
+	private IContractService contractService;
+	
+	@Autowired
+	private SysUserService userService;
+
+	@Autowired
+	private RedisTemplate redisTemplate;
 
 	/**分页查询
 	 * */
@@ -68,6 +89,38 @@ public class CouponServiceImpl extends ServiceImpl<CouponMapper, Coupon> impleme
 	 * */
 	@Override
 	public CouponForm saveForm(@Valid CouponForm form) {
+		
+		// 校验是否已领取过优惠券
+		List<Coupon> list = this.list(new LambdaQueryWrapper<Coupon>().eq(Coupon::getToUserId, SecurityUtils.getUserId()).eq(Coupon::getGoodsId, form.getGoodsId()));
+		Assert.isTrue(CollectionUtil.isEmpty(list), "已存在领取的优惠券");
+
+
+		String contractIdEnc = (String) redisTemplate.opsForValue().get(form.getContractIdEnc());
+		Assert.isTrue(StrUtil.isNotBlank(contractIdEnc), "二维码已过期");
+		Long contractId = Long.parseLong(contractIdEnc);
+		form.setContractId(contractId);
+		// 根据协议id生成优惠券
+		if(form.getContractId() != null){
+			Contract contract = contractService.getById(form.getContractId());
+			Assert.isTrue(contract != null, "关联协议数据不存在");
+			SysUser user = userService.getOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getContractId, form.getContractId()));
+			Assert.isTrue(user != null, "关联协议用户数据不存在");
+			form.setFromUserId(user.getId());
+			form.setToUserId(SecurityUtils.getUserId());
+			form.setScenes(1);//使用场景(1-停车场, 2-其他场景
+			// 1 扫码抵用金额 2扫码抵用时长
+			if(contract.getScanType().equals("1")){
+				form.setDenomination(contract.getDiscountAmount());
+				form.setCouponType(1);//优惠券类型(1-金额券, 2-时长券)
+			}else if(contract.getScanType().equals("2")){
+				form.setDenomination(contract.getDiscountMinute() != null ? new BigDecimal(contract.getDiscountMinute()) : BigDecimal.ZERO);
+				form.setCouponType(2);//优惠券类型(1-金额券, 2-时长券)
+			}
+			form.setEffectiveTime(System.currentTimeMillis());
+			form.setExpireTime(contract.getEndDate().getTime());
+			form.setStatus(0);//状态(0-已使用, 1-未使用, 2-锁定)
+			
+		}
 		// 实体对象转换 form->entity
 		Coupon entity = converter.form2Entity(form);
         // 持久化