From a00dbefc3837ab7781f9d50cd8ddb1261a416b79 Mon Sep 17 00:00:00 2001 From: luodangjia <luodangjia> Date: 星期三, 23 十月 2024 09:54:20 +0800 Subject: [PATCH] marge --- ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TGoodsController.java | 296 ++++++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 271 insertions(+), 25 deletions(-) diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TGoodsController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TGoodsController.java index 357c25a..4e010fd 100644 --- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TGoodsController.java +++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TGoodsController.java @@ -1,28 +1,47 @@ 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.other.api.domain.TActivity; +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.order.api.vo.ExchangeDto; import com.ruoyi.other.api.dto.GoodsDTO; import com.ruoyi.other.service.TActivityService; -import com.ruoyi.other.service.TAdvertisingService; +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; /** * <p> @@ -39,18 +58,36 @@ 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<List<Integer>> getGoodsIdsByName(@PathVariable("name")String name) { + List<Integer> collect = goodsService.list(new QueryWrapper<TGoods>() + .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(); @@ -60,6 +97,7 @@ @GetMapping("/delete") @ApiOperation(tags = {"管理后台-商品管理"},value = "商品删除") + @Log(title = "【商品管理】删除商品", businessType = BusinessType.DELETE) public AjaxResult delete(String ids) { goodsService.removeBatchByIds(Arrays.asList(ids.split(","))); return AjaxResult.success(); @@ -69,6 +107,7 @@ @PostMapping("/updateVip") @ApiOperation(tags = {"管理后台-商品管理"},value = "商品修改") + @Log(title = "【商品管理】修改商品", businessType = BusinessType.UPDATE) public AjaxResult updateActivity(@RequestBody TGoods dto) { goodsService.updateById(dto); return AjaxResult.success(); @@ -77,10 +116,37 @@ @GetMapping("/getInfo") - @ApiOperation(tags = {"管理后台-商品管理","小程序-兑换商城"},value = "商品查看详情") + @ApiOperation(tags = {"管理后台-商品管理"},value = "商品查看详情") public AjaxResult<TGoods> getInfo(Integer id) { - return AjaxResult.ok(goodsService.getById(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,"内容不存在"); + } +// List<Integer> data = orderClient.getSalesCountByGoodsId(String.valueOf(id)).getData(); +// for (int i = 0; i < list.size(); i++) { +// list.get(i).setSalesCount(data.get(i)); +// } + + return R.ok(byId); + } + else { + TCoupon byId = couponService.getById(id); + if (byId==null||byId.getStatus()==2){ + return R.fail(2,"内容不存在"); + } + return R.ok(byId); + } + } + @@ -93,37 +159,205 @@ @ApiOperation(tags = {"小程序-兑换商城"},value = "商品列表分页查询") @PostMapping(value = "/app/pageList") - public AjaxResult<PageInfo<TGoods>> apppageList(BasePage basePage) { - return AjaxResult.ok(goodsService.pageList1(basePage)); + public AjaxResult<PageInfo<TGoods>> apppageList(@RequestBody AppGoodQuery appGoodQuery) { + return AjaxResult.ok(goodsService.pageList1(appGoodQuery)); } - @ApiOperation(tags = {"小程序-兑换商城"},value = "兑换商品") - @PostMapping(value = "/app/shop") - public AjaxResult<PageInfo<TGoods>> shop(@RequestBody ExchangeDto exchangeDto) { - //查询当前商品信息 - TGoods good = goodsService.getById(exchangeDto.getGoodId()); + + @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()<good.getRedeemPoints()){ + return R.fail("当前用户积分不足"); + } + }else { + TCoupon coupon = couponService.getById(exchangeDto.getGoodId()); + point = coupon.getRedeemPoints(); + + Long count = orderClient.getExchangeById(exchangeDto.getGoodId(), userId,exchangeDto.getGoodType()).getData(); + if (coupon.getInventoryQuantity() != -1 && count >= coupon.getInventoryQuantity()) { + return R.fail("当前用户已到达兑换"+coupon+"次"); + } + } + return R.ok(); + + } + @ApiOperation(tags = {"小程序-兑换商城"},value = "积分兑换商品") + @PostMapping(value = "/app/shop") + public AjaxResult<PageInfo<TGoods>> 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()<good.getRedeemPoints()){ return AjaxResult.error("当前用户积分不足"); + } + }else { + TCoupon coupon = couponService.getById(exchangeDto.getGoodId()); + point = coupon.getRedeemPoints(); + + Long count = orderClient.getExchangeById(exchangeDto.getGoodId(), userId,exchangeDto.getGoodType()).getData(); + if (user.getPoints()<point){ + return AjaxResult.error("当前用户积分不足"); + } + if (coupon.getInventoryQuantity() != -1 && count >= coupon.getInventoryQuantity()) { + return AjaxResult.error("当前用户已到达兑换"+coupon+"次"); + }else { + coupon.setInventoryQuantity(coupon.getInventoryQuantity()-1); + couponService.updateById(coupon); + } + + } - //检查当前用户是否到达兑换上限 - Long count = orderClient.getExchangeById(exchangeDto.getGoodId(), userId).getData(); - if (good.getLimitExchangeTimes()!=-1&&count>=good.getLimitExchangeTimes()){ - return AjaxResult.error("当前用户已到达兑换上限"); - } + exchangeDto.setPoint(point); + exchangeDto.setUserId(userId); //生成积分兑换成功的订单 - orderClient.exchangeCreate(exchangeDto); + R<ExchangeBackDto> 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); + } //生成消耗积分的记录 - return AjaxResult.success(); + 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<Map<String, Object>> 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<Map<String, Object>> mapR = wxPaymentClient.orderPay(paymentOrder); + return mapR; + }else { + //todo 罗 支付宝支付 + return R.ok(); + } + + } @@ -139,5 +373,17 @@ 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(); + } } -- Gitblit v1.7.1