| | |
| | | @PostMapping("/app-user/getAppUserByPhone") |
| | | R<List<AppUser>> getAppUserByPhone(@RequestParam("phone") String phone); |
| | | |
| | | /** |
| | | * 根据用户电话模糊搜索用户列表(包含被删除的用户) |
| | | * @param phone |
| | | * @return |
| | | */ |
| | | @GetMapping("/app-user/getAppUserByPhoneNoFilter") |
| | | public R<List<AppUser>> getAppUserByPhoneNoFilter(@RequestParam("phone") String phone); |
| | | |
| | |
| | | @ApiModelProperty(value = "优惠劵id") |
| | | @TableField("coupon_id") |
| | | private Integer couponId; |
| | | |
| | | |
| | | /** |
| | | * 优惠券快照 |
| | | */ |
| | | @TableField("coupon_info") |
| | | private String couponInfo; |
| | | |
| | | |
| | | @ApiModelProperty(value = "优惠劵信息") |
| | | @TableField(exist = false) |
| | | private CouponInfoVo couponInfoVo; |
| | |
| | | @TableField(exist = false) |
| | | private List<String> goodNames; |
| | | |
| | | @ApiModelProperty(value = "其他商品名称") |
| | | private String goodsNameJson; |
| | | |
| | | |
| | | } |
| | |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.order.feignClient.OrderClient; |
| | | import com.ruoyi.order.model.Order; |
| | | import com.ruoyi.order.vo.OrderSaleNum; |
| | | import org.springframework.cloud.openfeign.FallbackFactory; |
| | | |
| | | import java.util.List; |
| | |
| | | } |
| | | |
| | | @Override |
| | | public R<Integer> getShopSaleNumByShopIds(OrderSaleNum orderSaleNum) { |
| | | return R.fail("获取门店销售订单数量失败:" + cause.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<Set<Long>> getAppUserByShoppingShop(Integer shopId) { |
| | | return R.fail("获取所有在指定门店消费的用户id失败:" + cause.getMessage()); |
| | | } |
| | |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.order.factory.OrderClientFallbackFactory; |
| | | import com.ruoyi.order.model.Order; |
| | | import com.ruoyi.order.vo.OrderSaleNum; |
| | | import org.springframework.cloud.openfeign.FeignClient; |
| | | import org.springframework.web.bind.annotation.PostMapping; |
| | | import org.springframework.web.bind.annotation.RequestBody; |
| | |
| | | @PostMapping("/order/getShopSaleNum") |
| | | R<Integer> getShopSaleNum(@RequestParam("shopId") Integer shopId, @RequestParam("type") Integer type); |
| | | |
| | | @PostMapping("/order/getShopSaleNumByShopIds") |
| | | R<Integer> getShopSaleNumByShopIds(@RequestBody OrderSaleNum orderSaleNum); |
| | | |
| | | |
| | | /** |
| | | * 获取所有在指定门店消费的用户id |
New file |
| | |
| | | package com.ruoyi.order.vo; |
| | | |
| | | import lombok.Data; |
| | | |
| | | import java.util.List; |
| | | |
| | | @Data |
| | | public class OrderSaleNum { |
| | | private List<Integer> shopIds; |
| | | private Integer type; |
| | | } |
| | |
| | | public LoginUser getLoginUserApplet() { |
| | | LoginUser loginUserAppletToken = getLoginUserAppletToken(ServletUtils.getRequest()); |
| | | if (loginUserAppletToken == null) { |
| | | System.out.println("loginUserAppletToken: "+loginUserAppletToken); |
| | | throw new NotPermissionException("令牌已过期,请重新登录!"); |
| | | } |
| | | return loginUserAppletToken; |
| | |
| | | } |
| | | |
| | | /** |
| | | * 判断用户是否登录 |
| | | */ |
| | | public boolean isLoginApplet() { |
| | | LoginUser loginUserAppletToken = getLoginUserAppletToken(ServletUtils.getRequest()); |
| | | return loginUserAppletToken != null; |
| | | } |
| | | |
| | | /** |
| | | * 小程序 获取用户身份信息 |
| | | * |
| | | * @return 用户信息 |
| | |
| | | |
| | | @PostMapping("/getAppUserById") |
| | | public AppUser getAppUserById(@RequestParam("id") Long id) { |
| | | System.out.println("根据id获取用户:"+id); |
| | | return appUserService.getById(id); |
| | | } |
| | | |
| | |
| | | @GetMapping("/change") |
| | | @ApiOperation(value = "推广中心", tags = {"小程序-推广中心"}) |
| | | public R<AppUser> change(@ApiParam("换绑用户手机号") String phone) { |
| | | |
| | | Long userId1 = tokenService.getLoginUserApplet().getUserid(); |
| | | AppUser byId = appUserService.getById(userId1); |
| | | List<AppUser> appUserList = appUserService.list(new LambdaQueryWrapper<AppUser>() |
| | | .eq(AppUser::getInviteUserId, userId1) |
| | | .eq(AppUser::getPhone, phone)); |
| | | if (!CollectionUtils.isEmpty(appUserList)){ |
| | | return R.fail("绑定关系已存在!"); |
| | | } |
| | | |
| | | |
| | | |
| | | // List<AppUser> appUserList = appUserService.list(new LambdaQueryWrapper<AppUser>() |
| | | // .eq(AppUser::getInviteUserId, userId1) |
| | | // .eq(AppUser::getPhone, phone)); |
| | | // if (!CollectionUtils.isEmpty(appUserList)){ |
| | | // return R.fail("绑定关系已存在!"); |
| | | // } |
| | | //获取绑定门店 |
| | | AppUser user = appUserService.lambdaQuery() |
| | | .eq(AppUser::getPhone, phone) |
| | | .eq(AppUser::getDelFlag, 0) |
| | | .eq(AppUser::getStatus, 1) |
| | | .one(); |
| | | |
| | | |
| | | // 获取当前用户的所有下级 |
| | | List<AppUser> allSubordinates = getAllSubordinates(byId.getId()); |
| | | long count = allSubordinates.stream().filter(appUser -> appUser.getId().equals(user.getId())).count(); |
| | | if (count > 0) { |
| | | return R.fail("绑定关系已存在!"); |
| | | } |
| | | |
| | | if (user == null) { |
| | | return R.fail("当前手机号未注册"); |
| | | } |
| | | |
| | | Long userId = user.getId(); |
| | | if (userId.equals(byId.getId())) { |
| | | return R.fail("不能选择自己为绑定人。"); |
| | | } |
| | | |
| | | byId.setInviteUserId(user.getId()); |
| | | appUserService.updateById(byId); |
| | | return R.ok(); |
| | |
| | | |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.ruoyi.account.api.model.AppUser; |
| | | import com.ruoyi.account.api.model.BalanceChangeRecord; |
| | | import com.ruoyi.account.dto.BalanceQuery; |
| | | import com.ruoyi.account.service.BalanceChangeRecordService; |
| | | import com.ruoyi.account.vo.CommissionDetail; |
| | | import com.ruoyi.account.vo.CommissionStatistics; |
| | | import com.ruoyi.account.vo.WalletStatistics; |
| | | import com.ruoyi.account.vo.WalletStatisticsDetail; |
| | |
| | | |
| | | import javax.annotation.Resource; |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.math.BigDecimal; |
| | | import java.util.List; |
| | | |
| | | /** |
| | |
| | | @ApiOperation(value = "余额变更明细", tags = {"后台"}) |
| | | public R<IPage<BalanceChangeRecord>> page(@RequestBody BalanceQuery agentQuery) { |
| | | |
| | | return R.ok(balanceChangeRecordService.pageList(agentQuery)); |
| | | IPage<BalanceChangeRecord> page = balanceChangeRecordService.pageList(agentQuery); |
| | | for (BalanceChangeRecord record : page.getRecords()) { |
| | | BigDecimal beforeAmount = record.getBeforeAmount(); |
| | | BigDecimal afterAmount = record.getAfterAmount(); |
| | | if (beforeAmount.compareTo(afterAmount) > 0){ |
| | | record.setFlag(2); |
| | | }else { |
| | | record.setFlag(1); |
| | | } |
| | | } |
| | | return R.ok(page); |
| | | } |
| | | |
| | | /** |
| | |
| | | Page<UserCoupon> page = chainWrapper.page(Page.of(pageNum-1, pageSize)); |
| | | for (UserCoupon record : page.getRecords()) { |
| | | record.setIdStr(record.getId().toString()); |
| | | CouponInfo data = couponClient.detail(record.getCouponId()).getData(); |
| | | CouponInfoVo vo = new CouponInfoVo(); |
| | | BeanUtils.copyProperties(data,vo); |
| | | String couponInfo = record.getCouponInfo(); |
| | | CouponInfoVo vo = JSON.parseObject(couponInfo, CouponInfoVo.class); |
| | | // BeanUtils.copyProperties(data,vo); |
| | | //如果是商品券,将商品名称返回 |
| | | if (vo.getCouponType()==4){ |
| | | List<String> goodNames = new ArrayList<>(); |
| | |
| | | List<Goods> data1 = goodsClient.getAllGoods().getData(); |
| | | List<String> collect = data1.stream().map(Goods::getName).collect(Collectors.toList()); |
| | | goodNames.addAll(collect); |
| | | }else if(StringUtils.isEmpty(data.getForGoodIds())){ |
| | | goodNames.addAll(JSON.parseArray(data.getGoodsNameJson(), String.class)); |
| | | }else if(StringUtils.isEmpty(vo.getForGoodIds())){ |
| | | goodNames.addAll(JSON.parseArray(vo.getGoodsNameJson(), String.class)); |
| | | }else { |
| | | String[] split = vo.getForGoodIds().split(","); |
| | | R<List<Goods>> goodsById = goodsClient.getGoodsById(split); |
| | |
| | | userPointService.save(userPoint); |
| | | } |
| | | } |
| | | |
| | | |
| | | //增加优惠券记录,根据时间类型设置开始结束时间 |
| | | UserCoupon userCoupon = new UserCoupon(); |
| | | userCoupon.setAppUserId(userid); |
| | | userCoupon.setCouponInfo(JSON.toJSONString(data)); |
| | | if (data.getPeriodType()==1) { |
| | | userCoupon.setStartTime(data.getPeriodStartTime().atTime(0, 0, 0)); |
| | | userCoupon.setEndTime(data.getPeriodEndTime().atTime(23, 59, 59)); |
| | |
| | | import com.ruoyi.account.vo.vip.VipLevel; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.core.exception.ServiceException; |
| | | 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.*; |
| | |
| | | VipLevel vipLevel = new VipLevel(); |
| | | List<Level> levelList = new ArrayList<>(); |
| | | |
| | | // 批量获取 goodsVip 和 vipGoods |
| | | List<Integer> vipIds = vipSettingList.stream().map(VipSetting::getId).collect(Collectors.toList()); |
| | | Map<Integer, R<List<VipGood>>> vipGoodsMap = getVipGoods(vipIds); |
| | | |
| | | vipSettingList.forEach(vipSetting -> { |
| | | Level level = new Level(); |
| | | level.setName(vipSetting.getVipName()); |
| | | BeanUtils.copyBeanProp(level, vipSetting); |
| | | level.setVipDesc(baseSetting.getContent()); |
| | | |
| | | R<List<VipGood>> vipGoodR = vipGoodsMap.get(vipSetting.getId()); |
| | | if (R.isError(vipGoodR)) { |
| | | throw new ServiceException("会员商品获取失败"); |
| | | } |
| | | List<VipGood> vipGoodList = vipGoodR.getData(); |
| | | if (vipGoodList != null && !vipGoodList.isEmpty()) { |
| | | |
| | | List<String> goodsNames = new ArrayList<>(); |
| | | vipGoodList.forEach(vipGood -> { |
| | | Goods goods = JSON.parseObject(vipGood.getGood_json(), Goods.class); |
| | | if (StringUtils.isNotEmpty(vipSetting.getGoodIds())){ |
| | | String[] goodsIds = vipSetting.getGoodIds().split(","); |
| | | List<Goods> goodsList = goodsClient.getGoodsById(goodsIds).getData(); |
| | | if (goodsList != null) { |
| | | for (Goods goods : goodsList) { |
| | | if (goods.getDelFlag().equals(0)){ |
| | | goodsNames.add(goods.getName()); |
| | | }); |
| | | level.setGoodsNames(goodsNames); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | level.setGoodsNames(goodsNames); |
| | | levelList.add(level); |
| | | }); |
| | | |
| | |
| | | import com.ruoyi.account.vo.WithdrawalAuth; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.core.web.domain.AjaxResult; |
| | | import com.ruoyi.common.security.service.TokenService; |
| | | import com.ruoyi.system.api.model.LoginUser; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import io.swagger.annotations.ApiParam; |
| | |
| | | |
| | | @Resource |
| | | private BalanceChangeRecordService balanceChangeRecordService; |
| | | @Resource |
| | | private TokenService tokenService; |
| | | |
| | | /** |
| | | * 提现申请 |
| | |
| | | singlePay.setCallbackUrl("/account/withdrawal-requests/withdrawalCallback"); |
| | | SinglePayResult singlePayResult = TransferUtil.singlePay(singlePay); |
| | | if(null == singlePayResult){ |
| | | LoginUser loginUserApplet = tokenService.getLoginUserApplet(); |
| | | AppUser appUser = appUserService.getById(loginUserApplet.getUserid()); |
| | | BigDecimal balance = appUser.getBalance(); |
| | | BalanceChangeRecord balanceChangeRecord = new BalanceChangeRecord(); |
| | | balanceChangeRecord.setAppUserId(appUser.getId()); |
| | | balanceChangeRecord.setVipId(appUser.getVipId()); |
| | | // balanceChangeRecord.setOrderId(withdrawalRequests.getId()); |
| | | balanceChangeRecord.setChangeType(2); |
| | | balanceChangeRecord.setBeforeAmount(balance); |
| | | balanceChangeRecord.setChangeAmount(withdrawalAmount); |
| | | balanceChangeRecord.setAfterAmount(appUser.getBalance()); |
| | | balanceChangeRecord.setDelFlag(0); |
| | | balanceChangeRecord.setCreateTime(LocalDateTime.now()); |
| | | balanceChangeRecordService.save(balanceChangeRecord); |
| | | return R.fail("转账失败"); |
| | | } |
| | | withdrawal.setStatus(1); |
| | |
| | | |
| | | List<BalanceChangeRecord> balanceChangeRecordList = this.baseMapper.selectBalanceChangeRecordList1(balanceChangeRecord); |
| | | List<WalletStatisticsDetail> walletStatisticsDetailList = new ArrayList<>(); |
| | | BigDecimal totalWithdraw = BigDecimal.ZERO; |
| | | for (BalanceChangeRecord changeRecord : balanceChangeRecordList) { |
| | | |
| | | WalletStatisticsDetail walletStatisticsDetail = new WalletStatisticsDetail(); |
| | | BeanUtils.copyBeanProp(walletStatisticsDetail, changeRecord); |
| | | |
| | | BigDecimal beforeAmount = changeRecord.getBeforeAmount(); |
| | | BigDecimal afterAmount = changeRecord.getAfterAmount(); |
| | | |
| | | if (beforeAmount.compareTo(afterAmount) < 0 && changeRecord.getChangeType().equals(2)){ |
| | | BigDecimal changeAmount = changeRecord.getChangeAmount(); |
| | | totalWithdraw = totalWithdraw.add(changeAmount); |
| | | walletStatisticsDetail.setFlag(2); |
| | | }else { |
| | | walletStatisticsDetail.setFlag(1); |
| | | } |
| | | walletStatisticsDetailList.add(walletStatisticsDetail); |
| | | } |
| | | // 按时间排序(倒序) |
| | |
| | | )); |
| | | |
| | | BigDecimal totalRecharge = shopCommissionMap.get(1); |
| | | BigDecimal totalWithdraw = shopCommissionMap.get(2); |
| | | BigDecimal totalShopWithdraw = shopCommissionMap.get(7); |
| | | |
| | | List<WalletStatisticsDetail> walletStatisticsDetailList2 = walletStatisticsDetailList.subList(fromIndex, toIndex); |
| | | for (WalletStatisticsDetail changeRecord : walletStatisticsDetailList2) { |
| | | if (changeRecord.getChangeType().equals(1) || changeRecord.getChangeType().equals(3) || changeRecord.getChangeType().equals(4) || changeRecord.getChangeType().equals(6)) { |
| | | Integer flag = changeRecord.getFlag(); |
| | | if (flag.equals(1)){ |
| | | changeRecord.setChangeAmountString("+¥" + changeRecord.getChangeAmount()); |
| | | } else { |
| | | changeRecord.setChangeAmountString("-¥" + changeRecord.getChangeAmount()); |
| | |
| | | package com.ruoyi.account.vo; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.TableField; |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import com.ruoyi.common.core.annotation.Excel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | |
| | | @ApiModelProperty(value = "变更数量--带金额符号") |
| | | @Excel(name = "变更数量") |
| | | private String changeAmountString; |
| | | |
| | | @ApiModelProperty(value = "增或减标识: 1-增 2-减") |
| | | private Integer flag; |
| | | } |
| | |
| | | </select> |
| | | <select id="getUserStatisticsDetail" resultType="com.ruoyi.account.vo.UserStatisticsDetail"> |
| | | SELECT |
| | | SUM(tau.total_point) totalScore, |
| | | SUM(tau.shop_point+tau.share_point+tau.total_invite_point+tau.total_register_point+tau.total_share_point+tau.total_sign_point+tau.total_hour_point+total_performance_point) totalScore, |
| | | SUM(tau.shop_point) consumeScore, |
| | | SUM(tau.share_point) rebateScore, |
| | | SUM(tau.total_invite_point) inviteScore, |
| | |
| | | tbcr.after_amount |
| | | FROM |
| | | t_balance_change_record tbcr |
| | | LEFT JOIN t_app_user tau ON tbcr.app_user_id = tau.id |
| | | LEFT JOIN t_app_user tau ON tbcr.app_user_id = tau.id and tau.del_flag = 0 |
| | | <where> |
| | | <if test="changeRecord.userName != null and changeRecord.userName != ''"> |
| | | and tau.name like concat('%',#{changeRecord.userName},'%') |
| | |
| | | return R.ok(shopSaleNum); |
| | | } |
| | | |
| | | @PostMapping("/getShopSaleNumByShopIds") |
| | | public R<Integer> getShopSaleNumByShopIds(@RequestBody OrderSaleNum orderSaleNum){ |
| | | Integer shopSaleNum = orderService.getShopSaleNumByShopIds(orderSaleNum.getShopIds(), orderSaleNum.getType()); |
| | | return R.ok(shopSaleNum); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 获取所有在指定门店消费的用户id |
| | |
| | | * @return |
| | | */ |
| | | Integer getShopSaleNum(@Param("shopId") Integer shopId, @Param("type") Integer type); |
| | | |
| | | Integer getShopSaleNumByShopIds(@Param("shopIds") List<Integer> shopIds, @Param("type") Integer type); |
| | | } |
| | |
| | | * 导入物流信息 |
| | | */ |
| | | void importExpress(String url); |
| | | |
| | | Integer getShopSaleNumByShopIds(List<Integer> shopIds, Integer type); |
| | | } |
| | |
| | | .eq(OrderGood::getOrderId, order.getId())); |
| | | AppUser appUser = appUserClient.getAppUserById(order.getAppUserId()); |
| | | if(null == appUser){ |
| | | return; |
| | | continue; |
| | | } |
| | | //直推上级分佣金额 |
| | | BigDecimal ztsj_price = BigDecimal.ZERO; |
| | |
| | | private RegionClient regionClient; |
| | | |
| | | |
| | | |
| | | @Override |
| | | public List<OrderVO> selectOrderListByUserId(Integer status, Long userId) { |
| | | return orderMapper.selectOrderListByUserId(status, userId); |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | @Override |
| | |
| | | |
| | | /** |
| | | * 管理后台获取订单列表数据 |
| | | * |
| | | * @param orderPageList |
| | | * @return |
| | | */ |
| | |
| | | if (null != orderPageList.getAppUserIds()){ |
| | | orderPageList.setAppUserIds(orderPageList.getAppUserIds().stream().distinct().collect(Collectors.toList())); |
| | | } |
| | | |
| | | |
| | | |
| | | PageInfo<OrderPageListVo> pageInfo = new PageInfo<>(orderPageList.getPageCurr(), orderPageList.getPageSize()); |
| | |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | /** |
| | | * 小程序取消订单 |
| | | * |
| | | * @param orderId |
| | | * @return |
| | | */ |
| | |
| | | |
| | | /** |
| | | * 确认发货操作 |
| | | * |
| | | * @return |
| | | */ |
| | | @Override |
| | |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * 取消订单操作 |
| | | * |
| | | * @param orderId |
| | | * @return |
| | | */ |
| | |
| | | |
| | | /** |
| | | * 返回订单支付金额和回退积分和会员等级 |
| | | * |
| | | * @param order |
| | | */ |
| | | public R refundPayMoney(Order order){ |
| | |
| | | |
| | | /** |
| | | * 取消订单后回调处理 |
| | | * |
| | | * @return |
| | | */ |
| | | @Override |
| | |
| | | |
| | | /** |
| | | * 取消订单快递费回退 |
| | | * |
| | | * @return |
| | | */ |
| | | @Override |
| | |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | /** |
| | | * 收货操作 |
| | | * |
| | | * @param orderId |
| | | * @return |
| | | */ |
| | |
| | | |
| | | /** |
| | | * 获取订单详情 |
| | | * |
| | | * @param orderId |
| | | * @return |
| | | */ |
| | |
| | | MapTrackKD100Vo mapTrackKD100Vo = JSON.parseObject(order.getExpressResult(), MapTrackKD100Vo.class); |
| | | orderInfo.setExpress(mapTrackKD100Vo); |
| | | } |
| | | if (StringUtils.isNotEmpty(order.getExpressJson()) && !order.getExpressJson().equals("NULL")){ |
| | | JSONObject jsonObject = JSON.parseObject(order.getExpressJson()); |
| | | orderInfo.setExpressCompany(jsonObject.getString("com")); |
| | | orderInfo.setExpressNumber(jsonObject.getString("num")); |
| | | } |
| | | |
| | | List<OrderGood> orderGoods = orderGoodMapper.selectList(new LambdaQueryWrapper<OrderGood>().eq(OrderGood::getOrderId, orderId).eq(OrderGood::getDelFlag, 0)); |
| | | int sum = orderGoods.stream().mapToInt(OrderGood::getNum).sum(); |
| | | System.out.println("111111111111222"); |
| | | orderInfo.setGoodsNum(sum); |
| | | List<Object> goodsJson = new ArrayList<>(); |
| | | for (OrderGood orderGood : orderGoods) { |
| | |
| | | |
| | | /** |
| | | * 获取商品销售数量 |
| | | * |
| | | * @param goodsId |
| | | * @return |
| | | */ |
| | |
| | | |
| | | /** |
| | | * 获取店铺订单数量 |
| | | * |
| | | * @param shopId |
| | | * @param type |
| | | * @return |
| | |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public Integer getShopSaleNumByShopIds(List<Integer> shopIds, Integer type) { |
| | | return this.baseMapper.getShopSaleNumByShopIds(shopIds, type); |
| | | } |
| | | } |
| | |
| | | private String activityName; |
| | | @ApiModelProperty("核销码BASE64") |
| | | private String writeOffCode; |
| | | @ApiModelProperty("快递公司") |
| | | private String expressCompany; |
| | | @ApiModelProperty("快递单号") |
| | | private String expressNumber; |
| | | |
| | | } |
| | |
| | | and order_type = #{type} |
| | | </if> |
| | | </select> |
| | | <select id="getShopSaleNumByShopIds" resultType="java.lang.Integer"> |
| | | select |
| | | ifnull(count(1), 0) |
| | | from t_order a |
| | | where del_flag = 0 and pay_status = 2 and order_status in (1, 2, 3, 4, 7, 8) |
| | | and shop_id in |
| | | <foreach collection="shopIds" item="shopId" separator="," open="(" close=")" index="index"> |
| | | #{shopId} |
| | | </foreach> |
| | | <if test="null != type"> |
| | | and order_type = #{type} |
| | | </if> |
| | | </select> |
| | | </mapper> |
New file |
| | |
| | | # 使用官方的 OpenJDK 8 JRE 镜像作为基础镜像 |
| | | FROM docker.m.daocloud.io/library/openjdk:8-jre-alpine |
| | | |
| | | # 设置维护者信息 |
| | | LABEL maintainer="luofl,mit" |
| | | |
| | | # 创建必要的目录 |
| | | RUN mkdir -p /xss/server/logs \ |
| | | && mkdir -p /xss/server/temp |
| | | |
| | | # 设置工作目录 |
| | | WORKDIR /xss/server |
| | | |
| | | # 设置默认环境变量(可被运行时覆盖) |
| | | ENV SERVER_PORT=9600 |
| | | |
| | | # 声明容器暴露的端口(静态值更可靠) |
| | | EXPOSE 9600 |
| | | |
| | | # 将本地构建的 JAR 文件复制到镜像中 |
| | | ADD ./target/ruoyi-modules-other.jar ./app.jar |
| | | |
| | | # 定义容器启动时运行的命令 |
| | | ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-Dserver.port=${SERVER_PORT}", "-jar", "app.jar"] |
| | |
| | | @ApiOperation(value = "优惠劵管理-详情", tags = {"管理后台-活动管理"}) |
| | | public R<CouponInfo> detail(@RequestParam("id") Integer id) { |
| | | CouponInfo byId = couponInfoService.getById(id); |
| | | if (byId == null){ |
| | | return R.fail("优惠劵不存在"); |
| | | } |
| | | String forGoodIds = byId.getForGoodIds(); |
| | | if (!"-1".equals(forGoodIds) && StringUtils.isNotEmpty(forGoodIds)){ |
| | | List<Goods> goods = goodsService.listByIds(Arrays.asList(forGoodIds.split(","))); |
| | |
| | | |
| | | } |
| | | if (StringUtils.isNotEmpty(goodsEvaluate.getPhone())) { |
| | | usersPhoneList = appUserClient.getAppUserByPhone(goodsEvaluate.getPhone()).getData().stream().map(AppUser::getId).collect(Collectors.toList()); |
| | | usersPhoneList = appUserClient.getAppUserByPhoneNoFilter(goodsEvaluate.getPhone()).getData().stream().map(AppUser::getId).collect(Collectors.toList()); |
| | | if (usersPhoneList.isEmpty()) { |
| | | return R.ok(new Page<>()); |
| | | } |
| | |
| | | userIds.addAll(userList.stream().map(AppUser::getId).collect(Collectors.toList())); |
| | | } |
| | | |
| | | List<Share> list = shareService.list(); |
| | | if (CollectionUtils.isEmpty(list)){ |
| | | return R.ok(Page.of(pageNum, pageSize)); |
| | | } |
| | | List<Long> objectIds = list.stream().map(Share::getObjectId).distinct().collect(Collectors.toList()); |
| | | List<AppUser> appUsers = appUserClient.listByIds(objectIds); |
| | | List<Long> appUserIds = appUsers.stream().filter(item -> !item.getDelFlag()).map(AppUser::getId).collect(Collectors.toList()); |
| | | if (CollectionUtils.isEmpty(userIds)){ |
| | | userIds = appUserIds; |
| | | } |
| | | |
| | | |
| | | Page<Share> page = shareService.lambdaQuery() |
| | |
| | | import com.ruoyi.common.security.utils.MD5Generator; |
| | | import com.ruoyi.common.security.utils.SecurityUtils; |
| | | import com.ruoyi.order.feignClient.OrderClient; |
| | | import com.ruoyi.order.vo.OrderSaleNum; |
| | | import com.ruoyi.order.vo.VerifiableShopVo; |
| | | import com.ruoyi.other.api.domain.*; |
| | | import com.ruoyi.other.mapper.ShopMapper; |
| | |
| | | @ApiOperation(value = "门店统计", tags = {"管理后台-首页统计"}) |
| | | public R<ShopStatistics> shopStatistics(@ApiParam("门店id") Integer shopId) { |
| | | ShopStatistics shopStatistics = shopMapper.getShopStatistics(shopId); |
| | | if(null == shopId){ |
| | | shopId = 0; |
| | | } |
| | | Integer serviceOrder = orderClient.getShopSaleNum(shopId, 1).getData(); |
| | | Integer goodsOrder = orderClient.getShopSaleNum(shopId, 2).getData(); |
| | | List<Integer> shopIds; |
| | | |
| | | shopIds = shopService.list(new LambdaQueryWrapper<Shop>() |
| | | .eq(Shop::getDelFlag, 0) |
| | | .eq(shopId !=null,Shop::getId, shopId)) |
| | | .stream() |
| | | .map(Shop::getId) |
| | | .collect(Collectors.toList()); |
| | | |
| | | |
| | | if (CollectionUtils.isEmpty(shopIds)){ |
| | | shopStatistics.setTotalOrder(0); |
| | | shopStatistics.setServiceOrder(0); |
| | | shopStatistics.setGoodsOrder(0); |
| | | }else { |
| | | OrderSaleNum serviceOrderSaleNum = new OrderSaleNum(); |
| | | serviceOrderSaleNum.setShopIds(shopIds); |
| | | serviceOrderSaleNum.setType(1); |
| | | Integer serviceOrder = orderClient.getShopSaleNumByShopIds(serviceOrderSaleNum).getData(); |
| | | |
| | | OrderSaleNum goodsOrderSaleNum = new OrderSaleNum(); |
| | | goodsOrderSaleNum.setShopIds(shopIds); |
| | | goodsOrderSaleNum.setType(2); |
| | | Integer goodsOrder = orderClient.getShopSaleNumByShopIds(goodsOrderSaleNum).getData(); |
| | | |
| | | shopStatistics.setTotalOrder(serviceOrder + goodsOrder); |
| | | shopStatistics.setServiceOrder(serviceOrder); |
| | | shopStatistics.setGoodsOrder(goodsOrder); |
| | | } |
| | | return R.ok(shopStatistics); |
| | | } |
| | | |
| | |
| | | package com.ruoyi.other.service.impl; |
| | | |
| | | import cn.afterturn.easypoi.cache.manager.IFileLoader; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | |
| | | import com.ruoyi.account.api.model.AppUser; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.core.exception.ServiceException; |
| | | import com.ruoyi.common.core.exception.auth.NotPermissionException; |
| | | import com.ruoyi.common.core.utils.GeodesyUtil; |
| | | import com.ruoyi.common.core.utils.ServletUtils; |
| | | import com.ruoyi.common.core.utils.StringUtils; |
| | |
| | | |
| | | @Override |
| | | public ShopDetailVO getShopDetail(Integer shopId, BigDecimal longitude, BigDecimal latitude) { |
| | | Long userid = tokenService.getLoginUserApplet().getUserid(); |
| | | Long userid = null; |
| | | if (tokenService.isLoginApplet()){ |
| | | userid = tokenService.getLoginUserApplet().getUserid(); |
| | | } |
| | | // 查询店铺详情 |
| | | ShopDetailVO shopDetailVO = shopMapper.selectShopDetail(shopId); |
| | | if (shopDetailVO == null) { |
| | | throw new ServiceException("查询店铺不存在"); |
| | | } |
| | | if (userid != null){ |
| | | ShopScore one = shopScoreService.getOne(new LambdaQueryWrapper<ShopScore>().eq(ShopScore::getAppUserId, userid).eq(ShopScore::getShopId, shopId).last(" order by create_time desc limit 0, 1")); |
| | | shopDetailVO.setMyScore(null == one ? BigDecimal.ZERO : one.getScore()); |
| | | } |
| | | |
| | | // 计算距离 |
| | | if (shopDetailVO.getLongitude() != null && shopDetailVO.getLatitude() != null){ |
| | | String shopLocation = String.format("%s,%s", shopDetailVO.getLongitude(), shopDetailVO.getLatitude()); |
| | |
| | | SUM(ts.can_withdraw_money) canWithdrawMoney, |
| | | SUM(ts.withdraw_money) alreadyWithdrawMoney |
| | | FROM |
| | | t_shop ts |
| | | t_shop ts where ts.del_flag = 0 |
| | | <if test="null != shopId"> |
| | | where ts.id = #{shopId} |
| | | and ts.id = #{shopId} |
| | | </if> |
| | | </select> |
| | | </mapper> |