ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java
@@ -81,6 +81,11 @@ @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); ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/UserCoupon.java
@@ -66,6 +66,15 @@ @ApiModelProperty(value = "优惠劵id") @TableField("coupon_id") private Integer couponId; /** * 优惠券快照 */ @TableField("coupon_info") private String couponInfo; @ApiModelProperty(value = "优惠劵信息") @TableField(exist = false) private CouponInfoVo couponInfoVo; ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/vo/CouponInfoVo.java
@@ -120,5 +120,8 @@ @TableField(exist = false) private List<String> goodNames; @ApiModelProperty(value = "其他商品名称") private String goodsNameJson; } ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/factory/OrderClientFallbackFactory.java
@@ -3,6 +3,7 @@ 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; @@ -29,6 +30,11 @@ } @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()); } ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/feignClient/OrderClient.java
@@ -5,6 +5,7 @@ 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; @@ -40,6 +41,9 @@ @PostMapping("/order/getShopSaleNum") R<Integer> getShopSaleNum(@RequestParam("shopId") Integer shopId, @RequestParam("type") Integer type); @PostMapping("/order/getShopSaleNumByShopIds") R<Integer> getShopSaleNumByShopIds(@RequestBody OrderSaleNum orderSaleNum); /** * 获取所有在指定门店消费的用户id ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/vo/OrderSaleNum.java
New file @@ -0,0 +1,11 @@ package com.ruoyi.order.vo; import lombok.Data; import java.util.List; @Data public class OrderSaleNum { private List<Integer> shopIds; private Integer type; } ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java
@@ -91,6 +91,7 @@ public LoginUser getLoginUserApplet() { LoginUser loginUserAppletToken = getLoginUserAppletToken(ServletUtils.getRequest()); if (loginUserAppletToken == null) { System.out.println("loginUserAppletToken: "+loginUserAppletToken); throw new NotPermissionException("令牌已过期,请重新登录!"); } return loginUserAppletToken; @@ -101,6 +102,14 @@ String token = SecurityUtils.getToken(request); return getLoginUserApplet(token); } /** * 判断用户是否登录 */ public boolean isLoginApplet() { LoginUser loginUserAppletToken = getLoginUserAppletToken(ServletUtils.getRequest()); return loginUserAppletToken != null; } /** * 小程序 获取用户身份信息 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java
@@ -131,6 +131,7 @@ @PostMapping("/getAppUserById") public AppUser getAppUserById(@RequestParam("id") Long id) { System.out.println("根据id获取用户:"+id); return appUserService.getById(id); } @@ -399,23 +400,42 @@ @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(); ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/BalanceChangeRecordController.java
@@ -2,11 +2,9 @@ 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; @@ -18,6 +16,7 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.math.BigDecimal; import java.util.List; /** @@ -48,7 +47,17 @@ @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); } /** ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserCouponController.java
@@ -88,9 +88,9 @@ 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<>(); @@ -98,8 +98,8 @@ 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); @@ -255,9 +255,12 @@ 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)); ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/VipCenterController.java
@@ -12,6 +12,7 @@ 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.*; @@ -87,29 +88,27 @@ 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<String> goodsNames = new ArrayList<>(); 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()); } } } } 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); goodsNames.add(goods.getName()); }); level.setGoodsNames(goodsNames); } level.setGoodsNames(goodsNames); levelList.add(level); }); ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/WithdrawalRequestsController.java
@@ -19,6 +19,8 @@ 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; @@ -49,6 +51,8 @@ @Resource private BalanceChangeRecordService balanceChangeRecordService; @Resource private TokenService tokenService; /** * 提现申请 @@ -112,6 +116,20 @@ 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); ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java
@@ -492,8 +492,8 @@ loginVo.setFailureTime(Long.valueOf(tokenApplet.get("expires_in").toString())); return R.ok(loginVo); } /** * 会员等级变化 */ ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/BalanceChangeRecordServiceImpl.java
@@ -78,9 +78,22 @@ 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); } // 按时间排序(倒序) @@ -113,15 +126,15 @@ )); 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)) { changeRecord.setChangeAmountString("+¥" + changeRecord.getChangeAmount()); } else { changeRecord.setChangeAmountString("-¥" + changeRecord.getChangeAmount()); Integer flag = changeRecord.getFlag(); if (flag.equals(1)){ changeRecord.setChangeAmountString("+¥"+changeRecord.getChangeAmount()); }else { changeRecord.setChangeAmountString("-¥"+changeRecord.getChangeAmount()); } walletStatisticsDetailPage.setCurrent(current); walletStatisticsDetailPage.setSize(size); ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/WalletStatisticsDetail.java
@@ -1,5 +1,6 @@ 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; @@ -50,4 +51,7 @@ @ApiModelProperty(value = "变更数量--带金额符号") @Excel(name = "变更数量") private String changeAmountString; @ApiModelProperty(value = "增或减标识: 1-增 2-减") private Integer flag; } ruoyi-service/ruoyi-account/src/main/resources/mapper/account/AppUserMapper.xml
@@ -144,7 +144,7 @@ </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, ruoyi-service/ruoyi-account/src/main/resources/mapper/account/BalanceChangeRecordMapper.xml
@@ -70,7 +70,7 @@ 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},'%') ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderController.java
@@ -461,6 +461,12 @@ 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 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/OrderMapper.java
@@ -55,4 +55,6 @@ * @return */ Integer getShopSaleNum(@Param("shopId") Integer shopId, @Param("type") Integer type); Integer getShopSaleNumByShopIds(@Param("shopIds") List<Integer> shopIds, @Param("type") Integer type); } ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/OrderService.java
@@ -117,4 +117,6 @@ * 导入物流信息 */ void importExpress(String url); Integer getShopSaleNumByShopIds(List<Integer> shopIds, Integer type); } ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/CommissionServiceImpl.java
@@ -69,7 +69,7 @@ .eq(OrderGood::getOrderId, order.getId())); AppUser appUser = appUserClient.getAppUserById(order.getAppUserId()); if(null == appUser){ return; continue; } //直推上级分佣金额 BigDecimal ztsj_price = BigDecimal.ZERO; ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java
@@ -66,7 +66,7 @@ /** * <p> * 服务实现类 * 服务实现类 * </p> * * @author luodangjia @@ -90,22 +90,22 @@ private CommissionService commissionService; @Resource private BaseSettingClient baseSettingClient; @Resource private SysUserClient sysUserClient; @Resource private BalanceChangeRecordClient balanceChangeRecordClient; @Resource private UserPointClient userPointClient; @Resource private OrderBalancePaymentService orderBalancePaymentService; @Resource private VipSettingClient vipSettingClient; @Resource private GoodsClient goodsClient; @@ -115,22 +115,21 @@ private TechnicianSubscribeClient technicianSubscribeClient; @Resource private ShopBalanceStatementClient shopBalanceStatementClient; @Resource private RedisTemplate redisTemplate; @Resource private SystemConfigClient systemConfigClient; @Resource private UserCouponClient userCouponClient; @Resource private UserChangeLogClient userChangeLogClient; @Resource private RegionClient regionClient; @Override @@ -139,16 +138,14 @@ } @Override public OrderDetailVO getOrderDetail(Long orderId) { Order order = orderMapper.selectById(orderId); if (order == null){ if (order == null) { throw new ServiceException("订单不存在"); } R<Shop> shopR = shopClient.getShopById(order.getShopId()); if (!R.isSuccess(shopR)){ if (!R.isSuccess(shopR)) { throw new ServiceException("获取门店信息失败"); } @@ -174,20 +171,20 @@ // 收货地址 String addressJson = order.getAddressJson(); UserAddress userAddress = new UserAddress(); if (2 == order.getDistributionMode()){ if (2 == order.getDistributionMode()) { userAddress = JSONObject.parseObject(addressJson, UserAddress.class); } // 优惠券 String couponJson = order.getCouponJson(); CouponInfo couponInfo = new CouponInfo(); if (StringUtils.isNotEmpty(couponJson)){ if (StringUtils.isNotEmpty(couponJson)) { couponInfo = JSONObject.parseObject(couponJson, CouponInfo.class); } // 参与活动 String activityJson = order.getActivityJson(); OrderActivityInfo orderActivityInfo = new OrderActivityInfo(); if (StringUtils.isNotEmpty(activityJson)){ if (StringUtils.isNotEmpty(activityJson)) { orderActivityInfo = JSONObject.parseObject(activityJson, OrderActivityInfo.class); } OrderDetailVO orderDetailVO = new OrderDetailVO(); @@ -216,15 +213,15 @@ orderDetailVO.setLongitude(shop.getLongitude()); orderDetailVO.setLatitude(shop.getLatitude()); orderDetailVO.setShopId(shop.getId()); if(StringUtils.isNotEmpty(order.getExpressResult())){ if (StringUtils.isNotEmpty(order.getExpressResult())) { MapTrackKD100Vo mapTrackKD100Vo = JSON.parseObject(order.getExpressResult(), MapTrackKD100Vo.class); List<QueryKD100ListVo> data = mapTrackKD100Vo.getData(); orderDetailVO.setExpress(null != data && data.size() > 0 ? data.get(0).getContext() : ""); } if(order.getOrderType() == 1){ if (order.getOrderType() == 1) { List<TechnicianSubscribe> data = technicianSubscribeClient.getTechnicianSubscribeList(order.getId()).getData(); if(data.size() > 0){ if (data.size() > 0) { Long id = data.get(0).getId(); orderDetailVO.setTechnicianSubscribeId(id.toString()); Technician technician = technicianClient.shopdetail(order.getTechnicianId()).getData(); @@ -246,11 +243,11 @@ @Override public boolean check(Order order, Integer shopId, Long userId) { R<List<AppUserShop>> r = appUserClient.getAppUserShop(userId); if (r.getCode() != R.SUCCESS){ if (r.getCode() != R.SUCCESS) { throw new ServiceException("获取用户门店信息失败"); } List<AppUserShop> appUserShopList = r.getData(); if (appUserShopList == null || appUserShopList.isEmpty()){ if (appUserShopList == null || appUserShopList.isEmpty()) { return false; } @@ -258,12 +255,12 @@ List<AppUserShop> userShopList = appUserShopList.stream() .filter(appUserShop -> appUserShop.getShopId().equals(shopId)) .collect(Collectors.toList()); if (userShopList.isEmpty()){ if (userShopList.isEmpty()) { return false; } // 判断订单是否属于该门店 if (order == null){ if (order == null) { throw new ServiceException("订单不存在"); } @@ -276,7 +273,7 @@ LoginUser loginUserApplet = tokenService.getLoginUserApplet(); Order order = orderMapper.selectById(id); boolean check = check(order, shopId, loginUserApplet.getUserid()); if (!check){ if (!check) { throw new ServiceException("该订单与当前扫码门店不一致"); } @@ -297,16 +294,17 @@ order.setAfterSaleTime(LocalDateTime.now().plusDays(days)); order.setEndTime(LocalDateTime.now()); order.setCancellerAppUserId(loginUserApplet.getUserid()); if(StringUtils.isNotEmpty(technicianId) && !"null".equals(technicianId)){ if (StringUtils.isNotEmpty(technicianId) && !"null".equals(technicianId)) { order.setTechnicianId(Integer.valueOf(technicianId)); } // TODO orderMapper.updateById(order); } /** * 管理后台获取订单列表数据 * * @param orderPageList * @return */ @@ -314,47 +312,46 @@ public PageInfo<OrderPageListVo> getOrderPageList(OrderPageList orderPageList) { Long userid = tokenService.getLoginUser().getUserid(); SysUser sysUser = sysUserClient.getSysUser(userid).getData(); if(2 == sysUser.getRoleType()){ if (2 == sysUser.getRoleType()) { orderPageList.setShopId(sysUser.getObjectId()); } //搜索条件,用户姓名 if(StringUtils.isNotEmpty(orderPageList.getUserName())){ if (StringUtils.isNotEmpty(orderPageList.getUserName())) { List<AppUser> data = appUserClient.getAppUserByNameNoFilter(orderPageList.getUserName()).getData(); List<Long> collect = data.stream().map(AppUser::getId).collect(Collectors.toList()); if (CollectionUtils.isEmpty(collect)){ if (CollectionUtils.isEmpty(collect)) { return new PageInfo<>(); } if(null != orderPageList.getAppUserIds()){ if (null != orderPageList.getAppUserIds()) { List<Long> appUserIds = orderPageList.getAppUserIds(); appUserIds.addAll(collect); orderPageList.setAppUserIds(appUserIds); }else{ } else { orderPageList.setAppUserIds(collect); } } //搜索条件,用户电话 if(StringUtils.isNotEmpty(orderPageList.getPhone())){ if (StringUtils.isNotEmpty(orderPageList.getPhone())) { List<AppUser> data = appUserClient.getAppUserByPhoneNoFilter(orderPageList.getPhone()).getData(); List<Long> collect = data.stream().map(AppUser::getId).collect(Collectors.toList()); if (CollectionUtils.isEmpty(collect)){ if (CollectionUtils.isEmpty(collect)) { return new PageInfo<>(); } if(null != orderPageList.getAppUserIds()){ if (null != orderPageList.getAppUserIds()) { List<Long> appUserIds = orderPageList.getAppUserIds(); if (!containsAny(appUserIds,collect)) { if (!containsAny(appUserIds, collect)) { return new PageInfo<>(); } appUserIds.addAll(collect); orderPageList.setAppUserIds(appUserIds); }else{ } else { orderPageList.setAppUserIds(collect); } } if (null != orderPageList.getAppUserIds()){ if (null != orderPageList.getAppUserIds()) { orderPageList.setAppUserIds(orderPageList.getAppUserIds().stream().distinct().collect(Collectors.toList())); } PageInfo<OrderPageListVo> pageInfo = new PageInfo<>(orderPageList.getPageCurr(), orderPageList.getPageSize()); @@ -363,7 +360,7 @@ for (OrderPageListVo orderPageListVo : list) { Long appUserId = orderPageListVo.getAppUserId(); AppUser appUser = appUserClient.getAppUserById(appUserId); if(null != appUser){ if (null != appUser) { orderPageListVo.setUserName(appUser.getName()); orderPageListVo.setPhone(appUser.getPhone()); } @@ -376,7 +373,7 @@ orderPageListVo.setGetCommission(reduce); String expressJson = orderPageListVo.getExpressJson(); if (StringUtils.isNotEmpty(expressJson) && !expressJson.equals("NULL")){ if (StringUtils.isNotEmpty(expressJson) && !expressJson.equals("NULL")) { JSONObject jsonObject = null; try { jsonObject = JSONObject.parseObject(expressJson); @@ -415,32 +412,31 @@ } /** * 小程序取消订单 * * @param orderId * @return */ @Override public R cancel(Long orderId) { Order order = this.getById(orderId); if(null == order){ if (null == order) { return R.fail("取消失败"); } Long userid = tokenService.getLoginUserApplet().getUserid(); if(!order.getAppUserId().equals(userid)){ if (!order.getAppUserId().equals(userid)) { return R.fail("取消失败"); } if(!Arrays.asList(1, 2, 3).contains(order.getOrderStatus())){ if (!Arrays.asList(1, 2, 3).contains(order.getOrderStatus())) { return R.fail("订单取消失败"); } if(null != order.getAfterSaleTime() && LocalDateTime.now().isAfter(order.getAfterSaleTime())){ if (null != order.getAfterSaleTime() && LocalDateTime.now().isAfter(order.getAfterSaleTime())) { return R.fail("订单取消失败"); } order.setOrderStatus(5); R r = refundPayMoney(order); if(200 == r.getCode()){ if (200 == r.getCode()) { this.updateById(order); } return r; @@ -448,18 +444,19 @@ /** * 确认发货操作 * * @return */ @Override public R confirmDelivery(ConfirmDelivery confirmDelivery) { Order order = this.getById(confirmDelivery.getOrderId()); if(1 == order.getPayStatus()){ if (1 == order.getPayStatus()) { return R.fail("订单还未完成支付"); } if(1 == order.getOrderType() || null == order.getAddressJson()){ if (1 == order.getOrderType() || null == order.getAddressJson()) { return R.fail("该订单不支付快递配送"); } if(1 != order.getOrderStatus()){ if (1 != order.getOrderStatus()) { return R.fail("无效的操作"); } //添加快递号和修改订单状态 @@ -490,54 +487,55 @@ } /** * 取消订单操作 * * @param orderId * @return */ @Override public R cancelOrder(Long orderId) { Order order = this.getById(orderId); if(Arrays.asList(5, 6, 7).contains(order.getOrderStatus())){ if (Arrays.asList(5, 6, 7).contains(order.getOrderStatus())) { return R.fail("无效的操作"); } if(null != order.getAfterSaleTime() && LocalDateTime.now().isAfter(order.getAfterSaleTime())){ if (null != order.getAfterSaleTime() && LocalDateTime.now().isAfter(order.getAfterSaleTime())) { return R.fail("订单取消失败"); } order.setOrderStatus(5); R r = refundPayMoney(order); if(200 == r.getCode()){ if (200 == r.getCode()) { this.updateById(order); } return r; } /** * 返回订单支付金额和回退积分和会员等级 * * @param order */ public R refundPayMoney(Order order){ public R refundPayMoney(Order order) { //开始退款 Integer payMethod = order.getPayMethod(); BigDecimal paymentAmount = order.getPaymentAmount(); AppUser appUser = appUserClient.getAppUserById(order.getAppUserId()); if(1 == payMethod){ if (1 == payMethod) { //微信退款 RefundResult refund = PaymentUtil.refund(order.getOrderNumber(), "R" + order.getOrderNumber(), paymentAmount.doubleValue(), "/order/order/refundPayMoneyCallback"); if("100".equals(refund.getRa_Status())){ if ("100".equals(refund.getRa_Status())) { order.setRefundStatus(1); return R.ok(); }else{ } else { return R.fail(refund.getRc_CodeMsg()); } } if(2 == payMethod){ if (2 == payMethod) { //余额退款 OrderBalancePayment orderBalancePayment = orderBalancePaymentService.getOne(new LambdaQueryWrapper<OrderBalancePayment>().eq(OrderBalancePayment::getOrderId, order.getId())); BigDecimal balance = appUser.getBalance(); if(null != orderBalancePayment){ if (null != orderBalancePayment) { appUser.setTotalRedPacketAmount(appUser.getTotalRedPacketAmount().add(orderBalancePayment.getRedPacketAmount()).setScale(2, RoundingMode.HALF_EVEN)); // appUser.setTotalDistributionAmount(appUser.getTotalDistributionAmount().add(orderBalancePayment.getDistributionAmount()).setScale(2, RoundingMode.HALF_EVEN)); } @@ -546,12 +544,12 @@ //查询最后一次的消费订单 Order order1 = this.getOne(new LambdaQueryWrapper<Order>().eq(Order::getAppUserId, order.getAppUserId()).eq(Order::getPayStatus, 2) .eq(Order::getDelFlag, 0).in(Order::getOrderStatus, Arrays.asList(1, 2, 3, 4, 8)).ne(Order::getId, order.getId()).last(" order by create_time desc limit 0, 1")); if(null != order1){ if (null != order1) { appUser.setLastShopTime(order1.getCreateTime()); }else{ } else { appUser.setLastShopTime(null); } //构建账户余额流水明细 BalanceChangeRecord balanceChangeRecord = new BalanceChangeRecord(); balanceChangeRecord.setOrderId(order.getId()); @@ -582,13 +580,13 @@ appUser.setLavePoint(appUser.getLavePoint() - shopPoint); appUser.setAvailablePoint(appUser.getAvailablePoint() - availablePoint); appUser.setTotalAvailablePoint(appUser.getTotalAvailablePoint() - availablePoint); if(null != transferablePoint){ if (null != transferablePoint) { appUser.setTransferablePoint(appUser.getTransferablePoint() - transferablePoint); } appUser.setTotalPoint(appUser.getTotalPoint() - shopPoint); //构建积分流水明细 if(shopPoint > 0){ if (shopPoint > 0) { UserPoint userPoint = new UserPoint(); userPoint.setType(1); userPoint.setHistoricalPoint(lavePoint); @@ -600,37 +598,37 @@ userPointClient.saveUserPoint(userPoint); } appUserClient.editAppUserById(appUser); //降级检测 if(1 < appUser.getVipId() && appUser.getVipId() < 4){ if (1 < appUser.getVipId() && appUser.getVipId() < 4) { appUserClient.vipDemotion(appUser.getId()); } //回退优惠券状态 if(null != order.getUserCouponId()){ if (null != order.getUserCouponId()) { UserCoupon userCoupon = userCouponClient.getUserCoupon(order.getUserCouponId()).getData(); userCoupon.setUseTime(null); userCouponClient.editReturnUse(userCoupon); } } if(3 == payMethod){ if (3 == payMethod) { //开始运费退款,积分支付,运费是单独进行支付的,所以需要单独退款 if(null != order.getExpressAmount() && BigDecimal.ZERO.compareTo(order.getExpressAmount()) < 0){ if (null != order.getExpressAmount() && BigDecimal.ZERO.compareTo(order.getExpressAmount()) < 0) { BigDecimal expressAmount = order.getExpressAmount(); if(1 == order.getExpressPayMethod()){ if (1 == order.getExpressPayMethod()) { //微信退款 RefundResult refund = PaymentUtil.refund(order.getOrderNumber(), "R" + order.getOrderNumber(), expressAmount.doubleValue(), "/order/order/refundExpressPayMoneyCallback"); if("100".equals(refund.getRa_Status())){ if ("100".equals(refund.getRa_Status())) { order.setRefundStatus(1); return R.ok(); }else{ } else { return R.fail(refund.getRc_CodeMsg()); } } if(2 == order.getExpressPayMethod()){ if (2 == order.getExpressPayMethod()) { //余额退款 OrderBalancePayment orderBalancePayment = orderBalancePaymentService.getOne(new LambdaQueryWrapper<OrderBalancePayment>().eq(OrderBalancePayment::getOrderId, order.getId())); BigDecimal balance = appUser.getBalance(); if(null != orderBalancePayment){ if (null != orderBalancePayment) { appUser.setTotalRedPacketAmount(appUser.getTotalRedPacketAmount().add(orderBalancePayment.getRedPacketAmount()).setScale(2, RoundingMode.HALF_EVEN)); // appUser.setTotalDistributionAmount(appUser.getTotalDistributionAmount().add(orderBalancePayment.getDistributionAmount()).setScale(2, RoundingMode.HALF_EVEN)); } @@ -659,14 +657,14 @@ userPoint1.setObjectId(order.getId()); List<UserPoint> data = userPointClient.getUserPointList(userPoint1).getData(); Integer transferablePoint = order.getPoint(); if(data.size() > 0){ if (data.size() > 0) { UserPoint userPoint = data.get(0); transferablePoint = Integer.valueOf(userPoint.getExtention()); } appUser.setTransferablePoint(appUser.getTransferablePoint() + transferablePoint); //构建积分流水明细 if(order.getPoint() > 0){ if (order.getPoint() > 0) { UserPoint userPoint = new UserPoint(); userPoint.setType(11); userPoint.setHistoricalPoint(lavePoint); @@ -688,13 +686,14 @@ /** * 取消订单后回调处理 * * @return */ @Override public R refundPayMoneyCallback(RefundCallbackResult refundCallbackResult) { String code = refundCallbackResult.getR3_RefundOrderNo().substring(1); Order order = this.getOne(new LambdaQueryWrapper<Order>().eq(Order::getOrderNumber, code)); if(null == order || order.getPayStatus() == 1 || order.getOrderStatus() == 6){ if (null == order || order.getPayStatus() == 1 || order.getOrderStatus() == 6) { return R.ok(); } order.setRefundCode(refundCallbackResult.getR5_RefundTrxNo()); @@ -718,13 +717,13 @@ appUser.setLavePoint(appUser.getLavePoint() - shopPoint); appUser.setAvailablePoint(appUser.getAvailablePoint() - availablePoint); appUser.setTotalAvailablePoint(appUser.getTotalAvailablePoint() - availablePoint); if(null != transferablePoint){ if (null != transferablePoint) { appUser.setTransferablePoint(appUser.getTransferablePoint() - transferablePoint); } appUser.setTotalPoint(appUser.getTotalPoint() - shopPoint); //构建积分流水明细 if(shopPoint > 0){ if (shopPoint > 0) { UserPoint userPoint = new UserPoint(); userPoint.setType(1); userPoint.setHistoricalPoint(lavePoint); @@ -736,14 +735,14 @@ userPointClient.saveUserPoint(userPoint); } appUserClient.editAppUserById(appUser); //降级检测 if(1 < appUser.getVipId() && appUser.getVipId() < 4){ if (1 < appUser.getVipId() && appUser.getVipId() < 4) { appUserClient.vipDemotion(appUser.getId()); } //回退优惠券状态 if(null != order.getUserCouponId()){ if (null != order.getUserCouponId()) { UserCoupon userCoupon = userCouponClient.getUserCoupon(order.getUserCouponId()).getData(); userCoupon.setUseTime(null); userCouponClient.editReturnUse(userCoupon); @@ -754,13 +753,14 @@ /** * 取消订单快递费回退 * * @return */ @Override public R refundExpressPayMoneyCallback(RefundCallbackResult refundCallbackResult) { String code = refundCallbackResult.getR3_RefundOrderNo().substring(1); Order order = this.getOne(new LambdaQueryWrapper<Order>().eq(Order::getOrderNumber, code)); if(null == order || order.getPayStatus() == 1 || order.getOrderStatus() == 6){ if (null == order || order.getPayStatus() == 1 || order.getOrderStatus() == 6) { return R.ok(); } order.setRefundCode(refundCallbackResult.getR5_RefundTrxNo()); @@ -778,14 +778,14 @@ userPoint1.setObjectId(order.getId()); List<UserPoint> data = userPointClient.getUserPointList(userPoint1).getData(); Integer transferablePoint = order.getPoint(); if(data.size() > 0){ if (data.size() > 0) { UserPoint userPoint = data.get(0); transferablePoint = Integer.valueOf(userPoint.getExtention()); } appUser.setTransferablePoint(appUser.getTransferablePoint() + transferablePoint); //构建积分流水明细 if(order.getPoint() > 0){ if (order.getPoint() > 0) { UserPoint userPoint = new UserPoint(); userPoint.setType(11); userPoint.setHistoricalPoint(lavePoint); @@ -799,18 +799,17 @@ return R.ok(); } /** * 收货操作 * * @param orderId * @return */ @Override public R receivingOperation(Long orderId) { Order order = this.getById(orderId); if(order.getOrderStatus() != 2){ if (order.getOrderStatus() != 2) { return R.fail("无效的操作"); } order.setOrderStatus(4); @@ -829,10 +828,11 @@ this.updateById(order); return R.ok(); } /** * 获取订单详情 * * @param orderId * @return */ @@ -845,18 +845,18 @@ orderInfo.setOrderStatus(order.getOrderStatus()); orderInfo.setCreateTime(order.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); AppUser appUser = appUserClient.getAppUserById(order.getAppUserId()); if(null != appUser){ if (null != appUser) { orderInfo.setUserName(appUser.getName()); orderInfo.setPhone(appUser.getPhone()); } orderInfo.setOrderType(order.getOrderType() == 1 ? "服务" : (StringUtils.isNotEmpty(order.getAddressJson()) ? "单品-快递配送" : "单品-上门自提")); Shop shop = shopClient.getShopById(order.getShopId()).getData(); if(null != shop){ if (null != shop) { orderInfo.setShopName(shop.getName()); } orderInfo.setPaymentMethod(order.getPayMethod()); orderInfo.setTotalAmount(order.getTotalAmount()); if(StringUtils.isNotEmpty(order.getCouponJson())){ if (StringUtils.isNotEmpty(order.getCouponJson())) { CouponInfo couponInfo = JSON.parseObject(order.getCouponJson(), CouponInfo.class); orderInfo.setCouponName(couponInfo.getCouponName()); } @@ -864,7 +864,7 @@ orderInfo.setExpressAmount(order.getExpressAmount()); orderInfo.setPaymentAmount(order.getPaymentAmount()); orderInfo.setGetPoint(order.getGetPoint()); if(2 == order.getDistributionMode()){ if (2 == order.getDistributionMode()) { UserAddress userAddress = JSON.parseObject(order.getAddressJson(), UserAddress.class); orderInfo.setRecipient(userAddress.getRecieveName() + "-" + userAddress.getRecievePhone()); userAddress.setRecieveAddress(userAddress.getProvince() + userAddress.getCity() + userAddress.getDistrict() + userAddress.getRecieveAddress()); @@ -872,9 +872,14 @@ 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) { @@ -887,21 +892,21 @@ } orderInfo.setGoodsJson(JSON.toJSONString(goodsJson)); orderInfo.setPoint(order.getPoint()); if(null != order.getAfterSaleTime()){ if (null != order.getAfterSaleTime()) { orderInfo.setAfterSaleTime(order.getAfterSaleTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); } if(StringUtils.isNotEmpty(order.getActivityJson())){ if (StringUtils.isNotEmpty(order.getActivityJson())) { OrderActivityInfo activityInfo = JSON.parseObject(order.getActivityJson(), OrderActivityInfo.class); orderInfo.setActivityName(activityInfo.getActivityName()); } if(null != order.getEndTime()){ if (null != order.getEndTime()) { AppUser user = appUserClient.getAppUserById(order.getCancellerAppUserId()); orderInfo.setCanceller(user.getName()); orderInfo.setWriteOffTime(order.getEndTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); } if(order.getOrderType() == 1){ if (order.getOrderType() == 1) { List<TechnicianSubscribe> technicianSubscribes = technicianSubscribeClient.getTechnicianSubscribeList(order.getId()).getData(); if(technicianSubscribes.size() > 0){ if (technicianSubscribes.size() > 0) { Set<Integer> collect = technicianSubscribes.stream().map(TechnicianSubscribe::getTechnicianId).collect(Collectors.toSet()); List<Technician> data = technicianClient.getTechnicianByIds(collect).getData(); orderInfo.setTechnicianName(data.stream().map(Technician::getName).collect(Collectors.joining(","))); @@ -916,6 +921,7 @@ /** * 获取商品销售数量 * * @param goodsId * @return */ @@ -927,6 +933,7 @@ /** * 获取店铺订单数量 * * @param shopId * @param type * @return @@ -935,23 +942,23 @@ public Integer getShopSaleNum(Integer shopId, Integer type) { return this.baseMapper.getShopSaleNum(shopId, type); } /** * 定时查询快递信息 */ @Override public void taskExpress() { Set<Long> order_express = redisTemplate.opsForZSet().rangeByScore("order_express", 0, LocalDateTime.now().toEpochSecond(ZoneOffset.UTC)); if(order_express.size() > 0){ if (order_express.size() > 0) { for (Long id : order_express) { Order order = this.getById(id); if(order.getOrderStatus() != 2){ if (order.getOrderStatus() != 2) { redisTemplate.opsForZSet().remove("order_express", id); continue; } String expressJson = order.getExpressJson(); if(StringUtils.isEmpty(expressJson)){ if (StringUtils.isEmpty(expressJson)) { redisTemplate.opsForZSet().remove("order_express", id); continue; } @@ -978,7 +985,7 @@ @Transactional(rollbackFor = Exception.class) public void importExpress(String url) { URL url1 = new URL(url); try (InputStream fileInputStream = url1.openStream()) { try (InputStream fileInputStream = url1.openStream()) { Workbook workbook = new XSSFWorkbook(fileInputStream); Sheet sheet = workbook.getSheetAt(0); // 获取第一个Sheet int lastRowNum = sheet.getLastRowNum(); @@ -1002,39 +1009,39 @@ Order order = this.getOne(new LambdaQueryWrapper<Order>() .eq(Order::getOrderNumber, orderNum) ); if (order == null){ throw new ServiceException("订单不存在:"+orderNum, 500); if (order == null) { throw new ServiceException("订单不存在:" + orderNum, 500); } Integer orderType = order.getOrderType(); if (orderType != 2){ throw new ServiceException("该订单:"+orderNum+"类型不为单品订单", 500); if (orderType != 2) { throw new ServiceException("该订单:" + orderNum + "类型不为单品订单", 500); } if (order.getDistributionMode() != 2){ throw new ServiceException("该订单:"+orderNum+"配送方式不为快递", 500); if (order.getDistributionMode() != 2) { throw new ServiceException("该订单:" + orderNum + "配送方式不为快递", 500); } Integer orderStatus = order.getOrderStatus(); if (orderStatus != 1){ throw new ServiceException("该订单:"+orderNum+"状态不为待发货", 500); if (orderStatus != 1) { throw new ServiceException("该订单:" + orderNum + "状态不为待发货", 500); } String companyNameByCode = ExpressCompanyMap.getCodeByCompanyName(expressName); if(StringUtils.isEmpty(companyNameByCode)){ throw new ServiceException("快递公司名称错误:"+expressName, 500); if (StringUtils.isEmpty(companyNameByCode)) { throw new ServiceException("快递公司名称错误:" + expressName, 500); } R<Region> regionBiCode = regionClient.getRegionBiCode(provinceCode); if (regionBiCode.getData() == null) { throw new ServiceException("省份编码错误:"+provinceCode, 500); throw new ServiceException("省份编码错误:" + provinceCode, 500); } R<Region> regionBiCode1 = regionClient.getRegionBiCode(cityCode); if (regionBiCode1.getData() == null) { throw new ServiceException("城市编码错误:"+cityCode, 500); throw new ServiceException("城市编码错误:" + cityCode, 500); } JSONObject jsonObject = new JSONObject(); jsonObject.put("com", companyNameByCode); jsonObject.put("num", expressNum); ConfirmDelivery confirmDelivery =new ConfirmDelivery(); ConfirmDelivery confirmDelivery = new ConfirmDelivery(); confirmDelivery.setOrderId(order.getId()); confirmDelivery.setCode(jsonObject.toJSONString()); confirmDelivery.setDeliverProvince(regionBiCode.getData().getName()); @@ -1056,7 +1063,7 @@ public static void importExpress2(String filePath) throws MalformedURLException { // 从网络地址读取 URL url = new URL(filePath); try (InputStream fileInputStream = url.openStream()) { try (InputStream fileInputStream = url.openStream()) { Workbook workbook = new XSSFWorkbook(fileInputStream); Sheet sheet = workbook.getSheetAt(0); // 获取第一个Sheet @@ -1080,4 +1087,8 @@ } } @Override public Integer getShopSaleNumByShopIds(List<Integer> shopIds, Integer type) { return this.baseMapper.getShopSaleNumByShopIds(shopIds, type); } } ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/OrderInfoVo.java
@@ -73,5 +73,9 @@ private String activityName; @ApiModelProperty("核销码BASE64") private String writeOffCode; @ApiModelProperty("快递公司") private String expressCompany; @ApiModelProperty("快递单号") private String expressNumber; } ruoyi-service/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml
@@ -143,4 +143,17 @@ 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> ruoyi-service/ruoyi-other/Dockerfile
New file @@ -0,0 +1,24 @@ # 使用官方的 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"] ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/CouponInfoController.java
@@ -80,6 +80,9 @@ @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(","))); ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/GoodsEvaluateController.java
@@ -150,7 +150,7 @@ } 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<>()); } ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShareController.java
@@ -255,6 +255,16 @@ 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() ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopController.java
@@ -15,6 +15,7 @@ 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; @@ -688,14 +689,35 @@ @ApiOperation(value = "门店统计", tags = {"管理后台-首页统计"}) public R<ShopStatistics> shopStatistics(@ApiParam("门店id") Integer shopId) { ShopStatistics shopStatistics = shopMapper.getShopStatistics(shopId); if(null == shopId){ shopId = 0; 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); } Integer serviceOrder = orderClient.getShopSaleNum(shopId, 1).getData(); Integer goodsOrder = orderClient.getShopSaleNum(shopId, 2).getData(); shopStatistics.setTotalOrder(serviceOrder + goodsOrder); shopStatistics.setServiceOrder(serviceOrder); shopStatistics.setGoodsOrder(goodsOrder); return R.ok(shopStatistics); } ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/ShopServiceImpl.java
@@ -1,5 +1,6 @@ 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; @@ -8,6 +9,7 @@ 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; @@ -137,14 +139,20 @@ @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("查询店铺不存在"); } 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 (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()); ruoyi-service/ruoyi-other/src/main/resources/mapper/other/ShopMapper.xml
@@ -68,9 +68,9 @@ 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>