package com.ruoyi.other.controller; import java.math.BigDecimal; import java.time.LocalDateTime; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.ruoyi.account.api.dto.GrantCouponDto; import com.ruoyi.account.api.feignClient.AppCouponClient; import com.ruoyi.account.api.feignClient.AppUserClient; import com.ruoyi.account.api.model.TAppCoupon; import com.ruoyi.account.api.model.TAppUser; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.dto.AppGoodQuery; import com.ruoyi.common.core.dto.ExchangeBackDto; import com.ruoyi.common.core.dto.PointChangeDto; import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.core.web.page.BasePage; import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.common.log.annotation.Log; import com.ruoyi.common.log.enums.BusinessType; import com.ruoyi.common.security.service.TokenService; import com.ruoyi.order.api.feignClient.OrderClient; import com.ruoyi.order.api.model.TShoppingOrder; import com.ruoyi.other.api.domain.TCoupon; import com.ruoyi.other.api.domain.TGoods; import com.ruoyi.common.core.dto.ExchangeDto; import com.ruoyi.other.api.dto.AdvertisingDTO; import com.ruoyi.other.api.dto.GoodsDTO; import com.ruoyi.other.service.TActivityService; import com.ruoyi.other.service.TCouponService; import com.ruoyi.other.service.TGoodsService; import com.ruoyi.payment.api.feignClient.WxPaymentClient; import com.ruoyi.payment.api.vo.PaymentOrder; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.swing.*; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** *

* 前端控制器 *

* * @author 无关风月 * @since 2024-08-06 */ @RestController @RequestMapping("/t-goods") public class TGoodsController { @Autowired private TGoodsService goodsService; @Autowired private TActivityService activityService; @Resource private TokenService tokenService; @Resource private AppUserClient appUserClient; @Resource private OrderClient orderClient; @Resource private AppCouponClient appCouponClient; @Resource private TCouponService couponService; @Resource private WxPaymentClient wxPaymentClient; /** * 远程调用 根据商品名称查询商品ids * @param name * @return */ @PostMapping("/getGoodsIdsByName/{name}") public R> getGoodsIdsByName(@PathVariable("name")String name) { List collect = goodsService.list(new QueryWrapper() .like("name", name)).stream().map(TGoods::getId).collect(Collectors.toList()); return R.ok(collect); } @PostMapping("/saveGoods") @ApiOperation(tags = {"管理后台-商品管理"},value = "商品添加") @Log(title = "【商品管理】添加商品", businessType = BusinessType.INSERT) public AjaxResult saveActivity(@RequestBody TGoods dto) { goodsService.save(dto); return AjaxResult.success(); } @GetMapping("/delete") @ApiOperation(tags = {"管理后台-商品管理"},value = "商品删除") @Log(title = "【商品管理】删除商品", businessType = BusinessType.DELETE) public AjaxResult delete(String ids) { goodsService.removeBatchByIds(Arrays.asList(ids.split(","))); return AjaxResult.success(); } @PostMapping("/updateVip") @ApiOperation(tags = {"管理后台-商品管理"},value = "商品修改") @Log(title = "【商品管理】修改商品", businessType = BusinessType.UPDATE) public AjaxResult updateActivity(@RequestBody TGoods dto) { goodsService.updateById(dto); return AjaxResult.success(); } @GetMapping("/getInfo") @ApiOperation(tags = {"管理后台-商品管理"},value = "商品查看详情") public AjaxResult getInfo(Integer id) { TGoods byId = goodsService.getById(id); return AjaxResult.ok(byId); } @GetMapping("/getInfoByType") @ApiOperation(tags = {"小程序-兑换商城"},value = "商品查看详情") public R getInfoByType(Integer goodType,Integer id) { if (goodType==1){ TGoods byId = goodsService.getById(id); if (byId==null||byId.getStatus()==2){ return R.fail(2,"内容不存在"); } return R.ok(byId);} else { TCoupon byId = couponService.getById(id); if (byId==null||byId.getStatus()==2){ return R.fail(2,"内容不存在"); } return R.ok(byId); } } @ApiOperation(tags = {"管理后台-商品管理"},value = "商品列表分页查询") @PostMapping(value = "/pageList") public AjaxResult> pageList(@RequestBody GoodsDTO dto) { return AjaxResult.ok(goodsService.pageList(dto)); } @ApiOperation(tags = {"小程序-兑换商城"},value = "商品列表分页查询") @PostMapping(value = "/app/pageList") public AjaxResult> apppageList(@RequestBody AppGoodQuery appGoodQuery) { return AjaxResult.ok(goodsService.pageList1(appGoodQuery)); } @ApiOperation(tags = {"小程序-兑换商城"},value = "积分兑换商品检查数量") @PostMapping(value = "/app/shop/check") public R check(@RequestBody ExchangeDto exchangeDto) { //检查当前用户积分是否够 Long userId = tokenService.getLoginUserApplet().getUserId(); Integer point = 0; if (exchangeDto.getGoodType()==1) { //查询当前商品信息 TGoods good = goodsService.getById(exchangeDto.getGoodId()); point = good.getRedeemPoints(); //检查当前用户是否到达兑换上限 Long count = orderClient.getExchangeById(exchangeDto.getGoodId(), userId,exchangeDto.getGoodType()).getData(); if (good.getLimitExchangeTimes() != -1 && count >= good.getLimitExchangeTimes()) { return R.fail("当前用户已兑换"+count+"张"); } TAppUser user = appUserClient.getUserById(userId).getData(); if (user.getPoints()= coupon.getInventoryQuantity()) { return R.fail("当前用户已到达兑换"+coupon+"次"); } } return R.ok(); } @ApiOperation(tags = {"小程序-兑换商城"},value = "积分兑换商品") @PostMapping(value = "/app/shop") public AjaxResult> shop(@RequestBody ExchangeDto exchangeDto) { //检查当前用户积分是否够 Long userId = tokenService.getLoginUserApplet().getUserId(); Integer point = 0; TAppUser user = appUserClient.getUserById(userId).getData(); if (exchangeDto.getGoodType()==1) { //查询当前商品信息 TGoods good = goodsService.getById(exchangeDto.getGoodId()); point = good.getRedeemPoints(); //检查当前用户是否到达兑换上限 Long count = orderClient.getExchangeById(exchangeDto.getGoodId(), userId,exchangeDto.getGoodType()).getData(); if (good.getLimitExchangeTimes() != -1 && count >= good.getLimitExchangeTimes()) { return AjaxResult.error("当前用户已兑换"+count+"张"); }else { //减少库存 good.setInventory(good.getInventory()-exchangeDto.getNum()); goodsService.updateById(good); } if (user.getPoints()= coupon.getInventoryQuantity()) { return AjaxResult.error("当前用户已到达兑换"+coupon+"次"); }else { coupon.setInventoryQuantity(coupon.getInventoryQuantity()-1); couponService.updateById(coupon); } } exchangeDto.setPoint(point); exchangeDto.setUserId(userId); //生成积分兑换成功的订单 R longR = orderClient.exchangeCreate(exchangeDto); if (exchangeDto.getGoodType()==2) { TCoupon coupon = couponService.getById(exchangeDto.getGoodId()); //如果是优惠卷,赠送优惠卷给用户 GrantCouponDto grantCouponDto = new GrantCouponDto(); grantCouponDto.setUserIds(userId.toString()); grantCouponDto.setCouponId(exchangeDto.getGoodId()); grantCouponDto.setWaysToObtain(1); grantCouponDto.setEndTime(LocalDateTime.now()); grantCouponDto.setType(3); switch (coupon.getValidityPeriodMode()){ case 1: grantCouponDto.setEndTime(coupon.getEndTime()); break; case 2: grantCouponDto.setEndTime(LocalDateTime.now().plusDays(coupon.getDays())); break; } appCouponClient.grantCoupon(grantCouponDto); } //生成消耗积分的记录 PointChangeDto pointChangeDto = new PointChangeDto(); pointChangeDto.setUserId(userId); pointChangeDto.setPoints(point); pointChangeDto.setRemark(String.valueOf(longR.getData().getId())); pointChangeDto.setType(6); pointChangeDto.setCode(longR.getData().getCode()); appUserClient.changeDown(pointChangeDto); return AjaxResult.success(longR.getData().getId()); } @ApiOperation(tags = {"小程序-现金商城"},value = "支付商品") @PostMapping(value = "/app/pay") public R> pay(@RequestBody ExchangeDto exchangeDto) { Long userId = tokenService.getLoginUserApplet().getUserId(); TAppUser user = appUserClient.getUserById(userId).getData(); boolean isVip = false; if (user.getVipEndTime()!=null&&user.getVipEndTime().isAfter(LocalDateTime.now())){ isVip = true; } //计算价格 BigDecimal orderPrice = new BigDecimal(0); BigDecimal payPrice = new BigDecimal(0); BigDecimal discountPrice = new BigDecimal(0); BigDecimal vipDiscount = new BigDecimal(0); if (exchangeDto.getGoodType()==1){ TGoods good = goodsService.getById(exchangeDto.getGoodId()); if (good.getStatus()==2){ return R.fail("当前商品已下架"); } BigDecimal originalPrice = good.getPreferentialPrice(); exchangeDto.setTitle("【商品购买】"+good.getName()); if (isVip){ if (good.getVipPrice()!=null){ vipDiscount = originalPrice.subtract(good.getVipPrice()).multiply(BigDecimal.valueOf(exchangeDto.getNum())); originalPrice = good.getVipPrice(); } } orderPrice = orderPrice.add(originalPrice.multiply(BigDecimal.valueOf(exchangeDto.getNum()))); }else { TCoupon coupon = couponService.getById(exchangeDto.getGoodId()); if (coupon.getStatus()==2){ return R.fail("当前商品已下架"); } exchangeDto.setTitle("【优惠卷购买】"+coupon.getName()); BigDecimal originalPrice = coupon.getPaymentAmount(); if (isVip){ if (coupon.getVipPaymentAmount()!=null) { vipDiscount = originalPrice.subtract(coupon.getVipPaymentAmount()).multiply(BigDecimal.valueOf(exchangeDto.getNum())); originalPrice = coupon.getVipPaymentAmount(); } } orderPrice = orderPrice.add(originalPrice); } exchangeDto.setOrderPrice(orderPrice); //查看是否使用优惠券 if(exchangeDto.getCouponId()!=null) { TAppCoupon appCoupon = appUserClient.couponGetById(exchangeDto.getCouponId()).getData(); TCoupon coupon = JSON.toJavaObject(JSON.parseObject(appCoupon.getCouponJson()), TCoupon.class); if (coupon.getValidityPeriodMode()==1){ if (orderPrice.compareTo(coupon.getMeetTheConditions())<0){ return R.fail("不满足使用优惠券条件"); } } payPrice = orderPrice.subtract(coupon.getDiscountAmount()); discountPrice = coupon.getDiscountAmount(); }else { payPrice = orderPrice; } exchangeDto.setPayPrice(payPrice); exchangeDto.setDiscountPrice(discountPrice); exchangeDto.setVipDiscount(vipDiscount); exchangeDto.setUserId(userId); exchangeDto.setPhone(user.getPhone()); //创建订单 TShoppingOrder shopOrder = orderClient.shopCreate(exchangeDto).getData(); if (exchangeDto.getPayMethod()==1) { //调起支付 PaymentOrder paymentOrder = new PaymentOrder(); paymentOrder.setCode(shopOrder.getCode()); paymentOrder.setAmount(exchangeDto.getOrderPrice()); paymentOrder.setOpenId(user.getWxOpenid()); paymentOrder.setDescription("购买商品"); R> mapR = wxPaymentClient.orderPay(paymentOrder); return mapR; }else { //todo 罗 支付宝支付 return R.ok(); } } /** * 根据id获取商品信息 * @param id * @return */ @PostMapping("/getGoodsById/{id}") public R getGoodsById(@PathVariable Integer id){ TGoods goods = goodsService.getById(id); return R.ok(goods); } /** * 修改商品 * @param goods * @return */ @PostMapping("/updateGoods") public R updateGoods(@RequestBody TGoods goods){ goodsService.updateById(goods); return R.ok(); } }