ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/UserAddressClientFallbackFactory.java
@@ -20,7 +20,7 @@ } @Override public R<UserAddress> getUserAddressById(Integer id) { public R<UserAddress> getUserAddressById(Long id) { return R.fail("根据id获取用户地址信息失败:" + cause.getMessage()); } }; ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/UserAddressClient.java
@@ -30,5 +30,5 @@ * @return */ @PostMapping("/user-address/getUserAddressById") R<UserAddress> getUserAddressById(@RequestParam("id") Integer id); R<UserAddress> getUserAddressById(@RequestParam("id") Long id); } ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/UserAddress.java
@@ -30,6 +30,10 @@ @TableId("id") private Long id; @TableField(exist = false) private String idStr; @TableField(exist = false) private String uid; ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/vo/CouponInfoVo.java
@@ -10,6 +10,7 @@ import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.List; /** * <p> @@ -116,5 +117,9 @@ @TableField("person_ids") private String personIds; @ApiModelProperty(value = "商品卷对应的商品名称") @TableField(exist = false) private List<String> goodNames; } ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/feignClient/RemoteOrderGoodsClient.java
@@ -26,4 +26,10 @@ */ @PostMapping("/order/getOrderListByIds") public R<List<Order>> getOrderListByIds(@RequestBody List<Long> orderIds); /** * 根据用户id和商品id查找订单列表 */ @PostMapping("/order/getOrderListByUserIdAndGoodsId") public R<List<Order>> getOrderListByUserIdAndGoodsId(@RequestBody OrderGood orderGood); } ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/GoodsClientFallbackFactory.java
@@ -29,6 +29,11 @@ public R<Goods> getGoodsById(Integer id) { return R.fail("根据id获取商品详情失败:" + cause.getMessage()); } @Override public R<List<Goods>> getGoodsById(String [] ids) { return R.fail("根据ids获取商品详情失败:" + cause.getMessage()); } }; } } ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/GoodsClient.java
@@ -34,4 +34,7 @@ */ @PostMapping("/goods/getGoodsById") R<Goods> getGoodsById(@RequestParam("id") Integer id); @PostMapping("/goods/getGoodsByIds") R<List<Goods>> getGoodsById(@RequestParam("ids") String[] ids); } ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserAddressController.java
@@ -85,6 +85,7 @@ Long userId = tokenService.getLoginUserApplet().getUserid(); List<UserAddress> list = userAddressService.lambdaQuery().eq(UserAddress::getAppUserId, userId).orderByDesc(UserAddress::getIsDefault).list(); for (UserAddress userAddress : list) { userAddress.setIdStr(userAddress.getId().toString()); userAddress.setUid(userAddress.getId().toString()); } return R.ok(list); @@ -140,6 +141,9 @@ public R<List<UserAddress>> getUserAddressList(){ Long userId = tokenService.getLoginUserApplet().getUserid(); List<UserAddress> list = userAddressService.lambdaQuery().eq(UserAddress::getAppUserId, userId).list(); for (UserAddress userAddress : list) { userAddress.setIdStr(userAddress.getId().toString()); } return R.ok(list); } @@ -150,7 +154,7 @@ */ @ResponseBody @PostMapping("/getUserAddressById") public R<UserAddress> getUserAddressById(@RequestParam("id") Integer id){ public R<UserAddress> getUserAddressById(@RequestParam("id") Long id){ UserAddress userAddress = userAddressService.getById(id); return R.ok(userAddress); } ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserCouponController.java
@@ -13,9 +13,13 @@ import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.bean.BeanUtils; import com.ruoyi.account.api.vo.PaymentUserCoupon; import com.ruoyi.other.api.domain.Goods; import com.ruoyi.other.api.feignClient.GoodsClient; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import com.ruoyi.common.security.service.TokenService; import com.ruoyi.other.api.domain.CouponInfo; @@ -48,6 +52,8 @@ @Resource private UserPointService userPointService; @Resource private GoodsClient goodsClient; @@ -65,6 +71,25 @@ CouponInfo data = couponClient.detail(record.getCouponId()).getData(); CouponInfoVo vo = new CouponInfoVo(); BeanUtils.copyProperties(data,vo); //如果是商品券,将商品名称返回 if (vo.getCouponType()==4){ List<String> goodNames = new ArrayList<>(); if (vo.getForGoodIds().equals("-1")){ goodNames.add("全部商品"); }else{ String[] split = vo.getForGoodIds().split(","); R<List<Goods>> goodsById = goodsClient.getGoodsById(split); if (goodsById.getData()!=null){ for (Goods datum : goodsById.getData()) { goodNames.add(datum.getName()); } } vo.setGoodNames(goodNames); } } record.setCouponInfoVo(vo); if (record.getUseTime()==null){ record.setStatus(1); ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/VipCenterController.java
@@ -127,18 +127,14 @@ public R<Void> test() { LoginUser loginUserApplet = tokenService.getLoginUserApplet(); AppUser appUser = appUserService.getById(loginUserApplet.getUserid()); if (appUser.getShopPoint() < 500){ return R.fail("消费积分不足500"); if (appUser.getShopPoint() >= 500){ return R.ok(); } if (appUser.getSharePoint() < 500){ return R.fail("返佣积分不足500"); if (appUser.getSharePoint() >= 400){ return R.ok(); } // 当前用户的直推用户 // List<AppUser> bottomUsers = appUserService.list(new LambdaQueryWrapper<AppUser>() // .eq(AppUser::getInviteUserId, loginUserApplet.getUserid()) // .eq(AppUser::getVipId)); return null; return R.fail(); } ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/VipCenterService.java
New file @@ -0,0 +1,24 @@ package com.ruoyi.account.service; public interface VipCenterService { /** * 校验准代理的申请条件 */ Boolean checkReadyToBeProxy(Long userId); /** * 校验代理的申请条件 */ Boolean checkReadyToBeAgent(Long userId); /** * 校验总代理的申请条件 */ Boolean checkReadyToBeTotalAgent(Long userId); /** * 校验合伙人的申请条件 */ Boolean checkReadyToBePartner(Long userId); } ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/VipCenterServiceImpl.java
New file @@ -0,0 +1,52 @@ package com.ruoyi.account.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ruoyi.account.api.model.AppUser; import com.ruoyi.account.service.AppUserService; import com.ruoyi.account.service.VipCenterService; import com.ruoyi.common.core.domain.R; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import java.util.List; @Service @RequiredArgsConstructor public class VipCenterServiceImpl implements VipCenterService { private final AppUserService appUserService; @Override public Boolean checkReadyToBeProxy(Long userId) { AppUser appUser = appUserService.getById(userId); if (appUser.getShopPoint() >= 500){ return true; } if (appUser.getSharePoint() >= 400){ return true; } // 当前用户的直推用户 List<AppUser> bottomUsers = appUserService.list(new LambdaQueryWrapper<AppUser>() .eq(AppUser::getInviteUserId, userId) .eq(AppUser::getVipId,3)); if (bottomUsers.size() >= 5){ return true; } return false; } @Override public Boolean checkReadyToBeAgent(Long userId) { return false; } @Override public Boolean checkReadyToBeTotalAgent(Long userId) { return false; } @Override public Boolean checkReadyToBePartner(Long userId) { return false; } } ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderController.java
@@ -1,17 +1,22 @@ package com.ruoyi.order.controller; import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.ruoyi.account.api.feignClient.UserAddressClient; import com.ruoyi.account.api.model.UserAddress; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.web.controller.BaseController; import com.ruoyi.common.core.web.page.TableDataInfo; import com.ruoyi.common.security.service.TokenService; import com.ruoyi.order.model.Order; import com.ruoyi.order.service.OrderService; import com.ruoyi.order.vo.OrderDetailVO; import com.ruoyi.order.vo.OrderVO; import com.ruoyi.system.api.model.LoginUser; import io.swagger.annotations.*; import org.springframework.web.bind.annotation.*; import com.ruoyi.order.vo.OrderDetailVO; import com.ruoyi.system.api.model.LoginUser; import com.ruoyi.order.model.Order; import javax.annotation.Resource; import java.util.List; @@ -31,7 +36,9 @@ @Resource private OrderService orderService; @Resource TokenService tokenService; private TokenService tokenService; @Resource private UserAddressClient addressClient; /** @@ -42,7 +49,7 @@ @ApiImplicitParam(value = "订单状态", name = "status", required = true, dataType = "int"), }) @GetMapping("/getMyOrderList") public TableDataInfo getMyOrderList(@ApiParam("订单状态") Integer status){ public TableDataInfo<OrderVO> getMyOrderList(@ApiParam("订单状态") Integer status){ startPage(); LoginUser loginUserApplet = tokenService.getLoginUserApplet(); return getDataTable(orderService.selectOrderListByUserId(status, loginUserApplet.getUserid())); @@ -90,9 +97,9 @@ @ApiImplicitParams({ @ApiImplicitParam(value = "订单号", name = "code", required = true, dataType = "String"), }) @GetMapping("/writeOff/{code}") public R<Void> writeOff(@PathVariable("code") String code){ // TODO 待完善 @GetMapping("/writeOff/{code}/{shopId}") public R<Void> writeOff(@PathVariable("code") String code, @PathVariable("shopId") Integer shopId){ orderService.writeOff(code, shopId); return R.ok(); } @@ -122,6 +129,27 @@ return R.ok(); } /** * 更换收货地址 */ @ApiOperation(value = "更换收货地址", tags = {"小程序-个人中心-我的订单-更换收货地址"}) @ApiImplicitParams({ @ApiImplicitParam(value = "订单id", name = "orderId", required = true, dataType = "int"), }) @GetMapping("/changeAddress") public R<Void> changeAddress(@RequestParam("orderId") Long orderId, @RequestParam("addressId") Long addressId){ R<UserAddress> userAddressR = addressClient.getUserAddressById(addressId); if(R.isError(userAddressR)){ return R.fail("收货地址不存在"); } UserAddress userAddress = userAddressR.getData(); String addressJson = JSONObject.toJSONString(userAddress); orderService.update(new LambdaUpdateWrapper<Order>() .eq(Order::getId, orderId) .set(Order::getAddressJson, addressJson)); return R.ok(); } ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderGoodController.java
@@ -35,5 +35,10 @@ .in(OrderGood::getGoodsId, goodsIds)); return R.ok(orderGoods); } @GetMapping("/getOrderListByUserIdAndGoodsId") public R<List<OrderGood>> getOrderListByUserIdAndGoodsId(Long userId, Long goodsId){ return R.ok(orderGoodService.getOrderListByUserIdAndGoodsId(userId, goodsId)); } } ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/RefundPassController.java
@@ -60,7 +60,7 @@ return R.fail("权限不足"); } RefundPass one = refundPassService.getOne(new LambdaQueryWrapper<RefundPass>().eq(RefundPass::getOrderId, orderId) .eq(RefundPass::getDelFlag, 0).last(" order by createTime desc limit 0,1")); .eq(RefundPass::getDelFlag, 0).last(" order by create_time desc limit 0,1")); one.setIdStr(one.getId().toString()); return R.ok(one); } ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/OrderGoodMapper.java
@@ -2,6 +2,9 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.order.model.OrderGood; import org.apache.ibatis.annotations.Param; import java.util.List; /** * <p> @@ -12,5 +15,6 @@ * @since 2024-11-21 */ public interface OrderGoodMapper extends BaseMapper<OrderGood> { public List<OrderGood> getOrderListByUserIdAndGoodsId(@Param("userId") Long userId,@Param("goodsId") Long goodsId); } ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/OrderGoodService.java
@@ -3,6 +3,8 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.order.model.OrderGood; import java.util.List; /** * <p> * 服务类 @@ -13,4 +15,6 @@ */ public interface OrderGoodService extends IService<OrderGood> { public List<OrderGood> getOrderListByUserIdAndGoodsId(Long userId, Long goodsId); } ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderGoodServiceImpl.java
@@ -4,7 +4,11 @@ import com.ruoyi.order.mapper.OrderGoodMapper; import com.ruoyi.order.model.OrderGood; import com.ruoyi.order.service.OrderGoodService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import java.util.Collections; import java.util.List; /** * <p> @@ -15,6 +19,12 @@ * @since 2024-11-21 */ @Service @RequiredArgsConstructor public class OrderGoodServiceImpl extends ServiceImpl<OrderGoodMapper, OrderGood> implements OrderGoodService { private final OrderGoodMapper orderGoodMapper; @Override public List<OrderGood> getOrderListByUserIdAndGoodsId(Long userId, Long goodsId) { return orderGoodMapper.getOrderListByUserIdAndGoodsId(userId, goodsId); } } ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ShoppingCartServiceImpl.java
@@ -629,12 +629,15 @@ if(data.size() != goodsList.size()){ String goodsName = ""; for (Integer goodsId : goodsIds) { if(!collect.contains(goodsId)){ goodsName = goodsClient.getGoodsById(goodsId).getData().getName(); Goods goods = goodsClient.getGoodsById(goodsId).getData(); if(1 == goods.getAppointStore() && !collect.contains(goodsId)){ goodsName = goods.getName(); break; } } return R.fail(goodsName + "不能在该门店核销"); if(StringUtils.isNotEmpty(goodsName)){ return R.fail(goodsName + "不能在该门店核销"); } } //开始构建支付信息 //现金支付的订单金额 @@ -853,12 +856,15 @@ orderGood.setSeckillJson(JSON.toJSONString(goodsSeckill)); } for (int i = 0; i < objects.size(); i++) { Integer id = objects.getJSONObject(i).getInteger("id"); Integer num1 = objects.getJSONObject(i).getInteger("num"); orderGood.setNum(num1); Goods goods1 = goodsClient.getGoodsById(id).getData(); orderGood.setGoodJson(JSON.toJSONString(goods1)); break; Long id = objects.getJSONObject(i).getLong("id"); if(myShoppingCartVo.getId().equals(id.toString())){ ShoppingCart shoppingCart = this.getById(id); Integer num1 = objects.getJSONObject(i).getInteger("num"); orderGood.setNum(num1); Goods goods1 = goodsClient.getGoodsById(shoppingCart.getGoodsId()).getData(); orderGood.setGoodJson(JSON.toJSONString(goods1)); break; } } orderGood.setDelFlag(0); orderGood.setCreateTime(LocalDateTime.now()); ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/ShoppingCartPayment.java
@@ -24,7 +24,7 @@ @ApiModelProperty(value = "配送方式(1=自提,2=快递)", required = false) private Integer distributionMode; @ApiModelProperty(value = "配送地址id", required = false) private Integer userAddressId; private Long userAddressId; @ApiModelProperty(value = "预计提货时间", required = false) private String expectedDeliveryTime; } ruoyi-service/ruoyi-order/src/main/resources/mapper/order/OrderGoodMapper.xml
@@ -1,7 +1,13 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.ruoyi.account.mapper.OrderGoodMapper"> <mapper namespace="com.ruoyi.order.mapper.OrderGoodMapper"> <select id="getOrderListByUserIdAndGoodsId" resultType="com.ruoyi.order.model.OrderGood"> SELECT * FROM t_order_good og LEFT JOIN t_order o ON og.order_id = o.id WHERE og.goods_id = #{goodsId} and o.app_user_id = #{userId} </select> </mapper> ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/GoodsController.java
@@ -88,6 +88,12 @@ return R.ok(goods); } @ResponseBody @PostMapping("/getGoodsByIds") public R<List<Goods>> getGoodsByIds(@RequestParam("ids") String [] ids){ List<Goods> goods = goodsService.lambdaQuery().in(Goods::getId, ids).eq(Goods::getStatus, 0).list(); return R.ok(goods); } } ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShareController.java
@@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.web.controller.BaseController; import com.ruoyi.common.security.service.TokenService; @@ -109,6 +110,61 @@ } @ApiOperation(value = "添加", tags = {"后台-分享管理"}) @PostMapping("/manage/add") public R<Void> manage(@RequestBody Share share){ Long userid = tokenService.getLoginUser().getUserid(); share.setAddType(1); share.setAuditStatus(ShareAuditStatus.SUCCESS.getCode()); share.setObjectId(userid.toString()); share.setDelFlag(0); shareService.save(share); return R.ok(); } @ApiOperation(value = "编辑", tags = {"后台-分享管理"}) @PostMapping("/manage/edit") public R<Void> manageedit(@RequestBody Share share){ shareService.updateById(share); return R.ok(); } @ApiOperation(value = "删除", tags = {"后台-分享管理"}) @GetMapping("/manage/delete") public R<Void> managedelete(@RequestParam Integer id){ shareService.removeById(id); return R.ok(); } @ApiOperation(value = "列表", tags = {"后台-分享管理"}) @GetMapping("/manage/list") public R<Void> managelist(String name,Integer addType,@RequestParam Integer PageNum,Integer pageSize){ shareService.lambdaQuery().like(name!=null,Share::getName,name).eq(addType!=null,Share::getAddType,addType).page(Page.of(pageSize,pageSize)); return R.ok(); } @ApiOperation(value = "设为小程序分享", tags = {"后台-分享管理"}) @GetMapping("/manage/set") public R<Void> set(@RequestParam Integer id){ //将所有分享设为不是小程序分享 List<Share> list = shareService.lambdaQuery().list(); if (!list.isEmpty()){ for (Share share : list) { } } //设置小程序分享 return R.ok(); } } ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/GoodsServiceImpl.java
@@ -7,13 +7,12 @@ import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.utils.bean.BeanUtils; import com.ruoyi.common.security.service.TokenService; import com.ruoyi.other.api.domain.Goods; import com.ruoyi.other.api.domain.GoodsArea; import com.ruoyi.other.api.domain.GoodsVip; import com.ruoyi.other.api.domain.VipSetting; import com.ruoyi.other.api.domain.*; import com.ruoyi.other.enums.GoodsStatus; import com.ruoyi.other.mapper.GoodsAreaMapper; import com.ruoyi.other.mapper.GoodsMapper; import com.ruoyi.other.mapper.GoodsShopMapper; import com.ruoyi.other.mapper.ShopMapper; import com.ruoyi.other.service.GoodsService; import com.ruoyi.other.service.GoodsVipService; import com.ruoyi.other.service.VipSettingService; @@ -26,6 +25,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; /** * <p> @@ -49,6 +49,10 @@ private GoodsVipService goodsVipService; @Resource private AppUserClient appUserClient; @Resource private GoodsShopMapper goodsShopMapper; @Resource private ShopMapper shopMapper; @Override public List<GoodsVO> goodsList(Goods search) { @@ -99,7 +103,14 @@ } Goods goods = this.getById(goodsId); List<GoodsShop> goodsShopList = goodsShopMapper.selectList(new LambdaQueryWrapper<GoodsShop>() .eq(GoodsShop::getGoodsId, goodsId)); List<Integer> shopIds = goodsShopList.stream().map(GoodsShop::getShopId).collect(Collectors.toList()); List<Shop> shopList = shopMapper.selectList(new LambdaQueryWrapper<Shop>() .in(Shop::getId, shopIds)); GoodsVO goodsVO = new GoodsVO(); goodsVO.setShopList(shopList); BeanUtils.copyBeanProp(goodsVO, goods); goodsVO.setGoodsId(goods.getId()); goodsVO.setGoodsName(goods.getName()); ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/vo/GoodsVO.java
@@ -1,11 +1,12 @@ package com.ruoyi.other.vo; import com.baomidou.mybatisplus.annotation.TableField; import com.ruoyi.other.api.domain.Shop; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; import java.util.List; @ApiModel(value="商品热销对象", description="热门商品") @Data @@ -39,7 +40,6 @@ private Integer pointPayment; @ApiModelProperty(value = "基础积分") @TableField("integral") private Integer integral; @ApiModelProperty(value = "划线价") @@ -51,4 +51,11 @@ @ApiModelProperty(value = "已售数量") private Integer saleNum; @ApiModelProperty(value = "门店id") private Integer shopId; @ApiModelProperty(value = "门店列表") private List<Shop> shopList; } ruoyi-service/ruoyi-other/src/main/resources/mapper/other/TechnicianMapper.xml
@@ -36,10 +36,10 @@ FROM t_technician tt LEFT JOIN t_technician_subscribe tts ON tt.id = tts.technician_id AND tts.`status` != 0 LEFT JOIN t_technician_score ttsc ON ttsc.technician_id = tt.id WHERE tts.`status` != 0 AND tt.`status` = 2 tt.`status` = 2 AND tt.del_flag = 0 AND tt.subscribe_status = 1 AND tt.id = #{technicianId} @@ -48,6 +48,7 @@ tt.`name`, tt.introduction, tt.home_picture, tt.introduction tt.introduction, tt.info_picture </select> </mapper>