package com.sinata.rest.modular.member.controller;
|
|
import cn.hutool.core.convert.Convert;
|
import cn.hutool.core.util.StrUtil;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.sinata.common.enums.EnumSystemSetKey;
|
import com.sinata.rest.common.ApiUtils;
|
import com.sinata.rest.common.PayUtils;
|
import com.sinata.rest.common.SpringUtil;
|
import com.sinata.rest.common.model.WxPay;
|
import com.sinata.rest.config.properties.PayProperties;
|
import com.sinata.rest.modular.auth.util.ThreadPoolUtil;
|
import com.sinata.rest.modular.mall.model.Notice;
|
import com.sinata.rest.modular.mall.service.INoticeService;
|
import com.sinata.rest.modular.member.controller.common.vo.MyCouponInfoVo;
|
import com.sinata.rest.modular.member.controller.common.vo.RegisterVo;
|
import com.sinata.rest.modular.member.model.MemUser;
|
import com.sinata.rest.modular.member.model.MyCoupon;
|
import com.sinata.rest.modular.member.model.MyUserCoupon;
|
import com.sinata.rest.modular.member.service.IMemUserService;
|
import com.sinata.rest.modular.member.service.IMyCouponService;
|
import com.sinata.rest.modular.member.service.IMyUserCouponService;
|
import com.sinata.rest.modular.system.controller.AuthController;
|
import com.sinata.rest.modular.system.model.SysNotice;
|
import com.sinata.rest.modular.system.model.TBanner;
|
import com.sinata.rest.modular.system.service.ISysNoticeService;
|
import com.sinata.rest.modular.system.service.ISystemSetService;
|
import com.sinata.rest.modular.system.service.ITBannerService;
|
import com.sinata.rest.modular.system.service.RedisTemplateService;
|
import io.swagger.annotations.Api;
|
import io.swagger.annotations.ApiImplicitParam;
|
import io.swagger.annotations.ApiImplicitParams;
|
import io.swagger.annotations.ApiOperation;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.web.bind.annotation.*;
|
|
import javax.annotation.Resource;
|
import javax.servlet.http.HttpServletRequest;
|
import java.math.BigDecimal;
|
import java.time.LocalDateTime;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.Objects;
|
|
@Slf4j
|
@RestController
|
@RequestMapping("/index")
|
@Api(tags = "首页相关接口", description = "首页相关接口")
|
public class IndexController extends AuthController {
|
@Autowired
|
IMemUserService memUserService;
|
@Autowired
|
IMyCouponService myCouponService;
|
@Autowired
|
private ITBannerService bannerService;
|
@Autowired
|
private ISysNoticeService sysNoticeService;
|
|
@Autowired
|
private RedisTemplateService redis;
|
|
@Resource
|
private PayProperties payProperties;
|
|
@Autowired
|
ISystemSetService systemSetService;
|
|
@GetMapping(value = "/getCouponList")
|
@ApiOperation(value = "获取优惠券广告列表", notes = "获取优惠券广告列表", response = MyCoupon.class)
|
@ApiImplicitParams({
|
@ApiImplicitParam(name = "cityCode", value = "所在区域", dataType = "Int", paramType = "query", required = true),
|
@ApiImplicitParam(name = "current", value = "页数", defaultValue = "1", dataType = "Int", paramType = "query", required = true),
|
@ApiImplicitParam(name = "size", value = "大小", defaultValue = "10", dataType = "Int", paramType = "query", required = true)
|
})
|
public Object getCouponList(String cityCode, Integer current, Integer size) {
|
Page<MyCoupon> page = new Page<MyCoupon>(current, size);
|
// 获取用户ID
|
Integer userId = ThreadPoolUtil.getUserId();
|
MemUser memUser = memUserService.getById(userId);
|
List<MyCoupon> couponList = myCouponService.getCouponList(page,cityCode, userId, memUser.getMemberGradeId());
|
|
return ApiUtils.returnOK(couponList);
|
}
|
|
@GetMapping(value = "/getBannerList")
|
@ApiOperation(value = "获取banner", response = TBanner.class)
|
public Object getBannerList() {
|
LocalDateTime nowTime = LocalDateTime.now();
|
LambdaQueryWrapper<TBanner> queryWrapper = new LambdaQueryWrapper<>();
|
queryWrapper.eq(TBanner::getIsDelete,Boolean.FALSE);
|
queryWrapper.eq(TBanner::getState,1);
|
queryWrapper.le(TBanner::getBeginTime,nowTime);
|
queryWrapper.ge(TBanner::getEndTime,nowTime);
|
queryWrapper.orderByDesc(TBanner::getOrderby);
|
return ApiUtils.returnOK(bannerService.list(queryWrapper));
|
}
|
@GetMapping(value = "/getNotice")
|
@ApiOperation(value = "获取通知信息", response = Notice.class)
|
public Object getNotice( Integer current, Integer size) {
|
Page<SysNotice> page = new Page<SysNotice>(current, size);
|
LocalDateTime nowTime = LocalDateTime.now();
|
LambdaQueryWrapper<SysNotice> queryWrapper = new LambdaQueryWrapper<>();
|
queryWrapper.le(SysNotice::getBeginTime,nowTime);
|
queryWrapper.ge(SysNotice::getEndTime,nowTime);
|
return ApiUtils.returnOK(sysNoticeService.list(queryWrapper));
|
}
|
@GetMapping(value = "/titleImage")
|
@ApiOperation(value = "获取通知信息", response = String.class)
|
public Object titleImage() {
|
return ApiUtils.returnOK(redis.get("DOCTOR_TITLE_IMAGE"));
|
}
|
|
@GetMapping(value = "/sysTel")
|
@ApiOperation(value = "获取平台客服电话", response = String.class)
|
public Object sysTel() {
|
return ApiUtils.returnOK(systemSetService.getById(EnumSystemSetKey.PLATFORM_TELEPHONE.index).getValueStr());
|
}
|
|
@GetMapping(value = "/getCouponInfo/{couponId}")
|
@ApiOperation(value = "获取优惠券详情", notes = "获取优惠券详情", response = MyCouponInfoVo.class)
|
public Object getCouponList(@PathVariable("couponId") Integer couponId) {
|
MyCouponInfoVo vo = new MyCouponInfoVo();
|
vo.setCoupon(myCouponService.getById(couponId));
|
if(Objects.nonNull(vo.getCoupon())){
|
vo.setGoodsList(myCouponService.getCouponGoodsList(couponId));
|
}
|
return ApiUtils.returnOK(vo);
|
}
|
|
@GetMapping(value = "/drawCoupon/{couponId}")
|
@ApiOperation(value = "获取优惠券", notes = "获取优惠券", response = Boolean.class)
|
public Object drawCoupon(@PathVariable("couponId") Integer couponId) {
|
MemUser memUser = decideMyCoupon(couponId,1);
|
return ApiUtils.returnOK(myCouponService.drawCoupon(couponId,memUser.getId()));
|
}
|
|
@GetMapping(value = "/drawPriceCoupon/{couponId}")
|
@ApiOperation(value = "获取有价优惠券", notes = "获取有价优惠券(返回微信支付参数)", response = HashMap.class)
|
public Object drawPriceCoupon(HttpServletRequest request, @PathVariable("couponId") Integer couponId, String openId) {
|
MemUser memUser = decideMyCoupon(couponId,2);
|
String orderNo = myCouponService.drawPriceCoupon(couponId,memUser.getId());
|
BigDecimal totalFee = myCouponService.getById(couponId).getPrice().multiply(Convert.toBigDecimal(100)).setScale(0,BigDecimal.ROUND_UP);
|
// if (!"prod".equals(SpringUtil.getActiveProfile())) {
|
// totalFee = BigDecimal.ONE;
|
// }
|
WxPay wxPay = new WxPay("1", payProperties.getWxAppId(), payProperties.getWxMchId(), "有价优惠券订单" + orderNo, openId, orderNo, totalFee.toString(), payProperties.getWxNotifyUrl() + "/wx", payProperties.getWxPayKey());
|
Map<String, Object> map = PayUtils.wxJsApiPay(wxPay, request);
|
HashMap<String, Object> pm = new HashMap<>(1);
|
pm.put("payInfo", map);
|
return ApiUtils.returnOK(pm);
|
}
|
|
/**
|
* 验证优惠券领取信息
|
* @param couponId 优惠券id
|
* @param couponType 验证类型
|
*/
|
private MemUser decideMyCoupon(Integer couponId,Integer couponType){
|
MyCoupon coupon = myCouponService.getById(couponId);
|
if(Objects.isNull(coupon) || !coupon.getType().equals(couponType)){
|
throw new IllegalArgumentException("错误的优惠券信息");
|
}
|
// 获取用户ID
|
final MemUser memUser = memUserService.getById(ThreadPoolUtil.getUserId());
|
//判断是否满足领取条件
|
if(StrUtil.isNotEmpty(coupon.getCondition())
|
&& !coupon.getCondition().contains(memUser.getMemberGradeId().toString())){
|
throw new IllegalArgumentException("不满足优惠券领取条件");
|
}
|
return memUser;
|
}
|
|
}
|