1.
phpcjl
2024-12-10 b0c4f3c46059d0c6310ec208b40114abceacff90
1.
14个文件已修改
2个文件已添加
200 ■■■■■ 已修改文件
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/factory/RemoteOrderGoodsFallbackFactory.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/feignClient/RemoteOrderGoodsClient.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/PointSetting.java 23 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/TechnicianSubscribe.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/TechnicianClientFallbackFactory.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/TechnicianClient.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-job/pom.xml 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/task/AfterSalesTask.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/task/TechnicianSubscribe.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AgentApplicationServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/CommissionController.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/CommissionServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TechnicianSubscribeController.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TechnicianSubscribeServiceImpl.java 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/factory/RemoteOrderGoodsFallbackFactory.java
@@ -8,6 +8,7 @@
import org.springframework.cloud.openfeign.FallbackFactory;
import java.util.List;
import java.util.Set;
@Slf4j
public class RemoteOrderGoodsFallbackFactory implements FallbackFactory<RemoteOrderGoodsClient> {
@@ -40,6 +41,11 @@
            public R<Void> subscribe(Long id, Integer technicianId) {
                return R.fail("预约失败");
            }
            @Override
            public R<Void> calculationCommission(Set<String> orderIds) {
                return R.fail("计算佣金失败");
            }
        };
    }
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/feignClient/RemoteOrderGoodsClient.java
@@ -13,6 +13,7 @@
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
import java.util.Set;
@FeignClient(contextId = "RemoteOrderGoodsClient", value = ServiceNameConstants.ORDER_SERVICE, fallbackFactory = RemoteOrderGoodsFallbackFactory.class)
public interface RemoteOrderGoodsClient {
@@ -46,4 +47,10 @@
     */
    @PostMapping("/order/subscribe")
    public R<Void> subscribe(@RequestParam(value = "id" , required = false) Long id ,@RequestParam(value = "technicianId", required = false) Integer technicianId);
    /**
     * 预约技师
     */
    @PostMapping("/commission/calculationCommission")
    public R<Void> calculationCommission(@RequestBody Set<String> orderIds);
}
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/PointSetting.java
@@ -7,7 +7,6 @@
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
@@ -41,23 +40,23 @@
    @ApiModelProperty(value = "拉新人积分")
    @TableField("new_point")
    private BigDecimal newPoint;
    private Integer newPoint;
    @ApiModelProperty(value = "每日分享积分")
    @TableField("every_share_point")
    private BigDecimal everySharePoint;
    private Integer everySharePoint;
    @ApiModelProperty(value = "每日签到积分")
    @TableField("sign_point")
    private BigDecimal signPoint;
    private Integer signPoint;
    @ApiModelProperty(value = "使用一小时积分")
    @TableField("hour_point")
    private BigDecimal hourPoint;
    private Integer hourPoint;
    @ApiModelProperty(value = "注册积分")
    @TableField("regis_point")
    private BigDecimal regisPoint;
    private Integer regisPoint;
    @ApiModelProperty(value = "注册积分 1开0关")
    @TableField("regis_point_open")
@@ -69,7 +68,7 @@
    @ApiModelProperty(value = "消费积分")
    @TableField("buy_point")
    private BigDecimal buyPoint;
    private Integer buyPoint;
    @ApiModelProperty(value = "消费积分积分 1开0关")
    @TableField("buy_point_open")
@@ -81,7 +80,7 @@
    @ApiModelProperty(value = "返佣积分")
    @TableField("share_point")
    private BigDecimal sharePoint;
    private Integer sharePoint;
    @ApiModelProperty(value = "返佣积分 1开0关")
    @TableField("share_point_open")
@@ -93,7 +92,7 @@
    @ApiModelProperty(value = "门店返佣积分")
    @TableField("shop_share_point")
    private BigDecimal shopSharePoint;
    private Integer shopSharePoint;
    @ApiModelProperty(value = "门店返佣积分 1开0关")
    @TableField("shop_share_point_open")
@@ -117,7 +116,7 @@
    @ApiModelProperty(value = "技师业绩积分")
    @TableField("person_point")
    private BigDecimal personPoint;
    private Integer personPoint;
    @ApiModelProperty(value = "技师业绩积分 1开0关")
    @TableField("person_point_open")
@@ -141,7 +140,7 @@
    @ApiModelProperty(value = "注册积分")
    @TableField("get_regis_point")
    private BigDecimal getRegisPoint;
    private Integer getRegisPoint;
    @ApiModelProperty(value = "注册积分 1开0关")
    @TableField("get_regis_point_open")
@@ -153,7 +152,7 @@
    @ApiModelProperty(value = "做工积分")
    @TableField("work_point")
    private BigDecimal workPoint;
    private Integer workPoint;
    @ApiModelProperty(value = "做工积分 1开0关")
    @TableField("work_point_open")
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/TechnicianSubscribe.java
@@ -68,13 +68,10 @@
    @TableField("create_time")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime createTime;
    @ApiModelProperty(value = "订单id")
    private Long orderId;
    @TableField(exist = false)
    private String idStr;
    @TableField(exist = false)
    private Long orderId;
    public void setId(Long id) {
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/TechnicianClientFallbackFactory.java
@@ -19,11 +19,6 @@
            public R<Void> updateStatus(Integer status, Long subscribeId) {
                return R.fail("跟新技师预约状态失败:" + cause.getMessage());
            }
            @Override
            public R<TechnicianSubscribe> getSubscribeByOrderId(Long orderId) {
                return R.fail("根据订单id获取预约信息失败:" + cause.getMessage());
            }
        };
    }
}
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/TechnicianClient.java
@@ -18,7 +18,4 @@
    @PutMapping("/technician-subscribe/updateStatus")
    R<Void> updateStatus(@RequestParam("status") Integer status, @RequestParam("subscribeId") Long subscribeId);
    @GetMapping("/technician-subscribe/getSubscribeByOrderId")
    R<TechnicianSubscribe> getSubscribeByOrderId(@RequestParam("orderId") Long orderId);
}
ruoyi-modules/ruoyi-job/pom.xml
@@ -19,10 +19,16 @@
        <dependency>
            <groupId>com.ruoyi</groupId>
            <artifactId>ruoyi-modules-order</artifactId>
            <version>3.6.2</version>
            <artifactId>ruoyi-api-account</artifactId>
        </dependency>
        <dependency>
            <groupId>com.ruoyi</groupId>
            <artifactId>ruoyi-api-other</artifactId>
        </dependency>
        <dependency>
            <groupId>com.ruoyi</groupId>
            <artifactId>ruoyi-api-order</artifactId>
        </dependency>
        <!-- SpringCloud Alibaba Nacos -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/task/AfterSalesTask.java
@@ -1,5 +1,7 @@
package com.ruoyi.job.task;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.order.feignClient.RemoteOrderGoodsClient;
import com.ruoyi.order.service.CommissionService;
import lombok.extern.log4j.Log4j2;
import org.springframework.data.redis.core.RedisTemplate;
@@ -8,13 +10,13 @@
import javax.annotation.Resource;
import java.util.Set;
@Component("ryTask")
@Component("afterSalesTask")
@Log4j2
public class AfterSalesTask {
    @Resource
    private RedisTemplate<String, String> redisTemplate;
    @Resource
    private CommissionService commissionService;
    private RemoteOrderGoodsClient remoteOrderGoodsClient;
    /**
     * 计算佣金(设置每分钟执行一次)
@@ -25,7 +27,10 @@
        // 从延迟队列中获取需要处理的订单
        Set<String> orderIds = redisTemplate.opsForZSet().rangeByScore("delay_queue:commission", 0, now);
        if (orderIds != null && !orderIds.isEmpty()) {
            commissionService.calculationCommission(orderIds);
            R<Void> r = remoteOrderGoodsClient.calculationCommission(orderIds);
            if (R.isError(r)) {
                log.error("计算佣金失败,订单号:{},错误信息:{}", orderIds, r.getMsg());
            }
            // 处理完后移除已处理的订单
            redisTemplate.opsForZSet().removeRangeByScore("delay_queue:commission", 0, now);
        }
ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/task/TechnicianSubscribe.java
New file
@@ -0,0 +1,28 @@
package com.ruoyi.job.task;
import com.ruoyi.other.api.feignClient.TechnicianClient;
import lombok.extern.log4j.Log4j2;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.Set;
@Component("technicianSubscribe")
@Log4j2
public class TechnicianSubscribe {
    @Resource
    private TechnicianClient technicianClient;
    @Resource
    private RedisTemplate<String, String> redisTemplate;
    public void updateStatus() {
        long now = System.currentTimeMillis() / 1000; // 获取当前时间戳(秒)
        Set<String> subscribeIds = redisTemplate.opsForZSet().rangeByScore("delay_queue:subscribe", 0, now);
        if (subscribeIds != null) {
            subscribeIds.forEach(subscribeId -> {
                technicianClient.updateStatus(2, Long.valueOf(subscribeId));
            });
        }
    }
}
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AgentApplicationServiceImpl.java
@@ -45,6 +45,7 @@
        AppUser appUser = appUserService.getById(loginUserApplet.getUserid());
        agentApplication.setAppUserId(loginUserApplet.getUserid());
        agentApplication.setStatus(1);
        agentApplication.setApplicationTime(LocalDateTime.now());
        agentApplication.setShopPoint(appUser.getShopPoint());
        agentApplication.setSharePoint(appUser.getSharePoint());
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java
@@ -4,9 +4,9 @@
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.account.api.model.AppUser;
import com.ruoyi.account.api.model.AppUserShop;
import com.ruoyi.account.mapper.AppUserMapper;
import com.ruoyi.account.api.model.AppUser;
import com.ruoyi.account.service.AppUserService;
import com.ruoyi.account.service.AppUserShopService;
import com.ruoyi.account.util.weChat.WXCore;
@@ -16,7 +16,9 @@
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.redis.service.RedisService;
import com.ruoyi.common.security.service.TokenService;
import com.ruoyi.other.api.domain.PointSetting;
import com.ruoyi.other.api.domain.Shop;
import com.ruoyi.other.api.feignClient.PointSettingClient;
import com.ruoyi.other.api.feignClient.ShopClient;
import com.ruoyi.system.api.domain.SysUser;
import com.ruoyi.system.api.feignClient.SysUserClient;
@@ -56,6 +58,9 @@
    
    @Resource
    private SysUserClient sysUserClient;
    @Resource
    private PointSettingClient pointSettingClient;
    
    
    
@@ -258,7 +263,16 @@
            appUser.setTotalRedPacketAmount(BigDecimal.ZERO);
            appUser.setTotalDistributionAmount(BigDecimal.ZERO);
            appUser.setBalance(BigDecimal.ZERO);
            appUser.setLavePoint(0);
            R<PointSetting> pointSettingR = pointSettingClient.getPointSetting(1);
            if (R.isError(pointSettingR)){
                throw new RuntimeException("获取积分设置失败");
            }
            PointSetting pointSetting = pointSettingR.getData();
            if (pointSetting == null){
                throw new RuntimeException("积分设置不存在");
            }
            appUser.setLavePoint(pointSetting.getGetRegisPoint());
            //根据平台的配置未达标,则标注为可修改推广人
            appUser.setChangePromoter(0);
            appUser.setLongitude(registerAccount.getLongitude());
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/CommissionController.java
New file
@@ -0,0 +1,21 @@
package com.ruoyi.order.controller;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.order.service.CommissionService;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.Set;
@RestController
@RequestMapping("commission")
public class CommissionController {
    @Resource
    private CommissionService commissionService;
    @PostMapping("/calculationCommission")
    public R<Void> calculationCommission(@RequestBody Set<String> orderIds){
        commissionService.calculationCommission(orderIds);
        return R.ok();
    }
}
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/CommissionServiceImpl.java
@@ -13,6 +13,7 @@
import com.ruoyi.order.model.OrderGood;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
@@ -50,6 +51,7 @@
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void calculationCommission(Set<String> orderIds) {
        List<OrderGood> orderGoods = orderGoodService.list(new LambdaQueryWrapper<OrderGood>()
                .in(OrderGood::getOrderId, orderIds));
@@ -63,6 +65,8 @@
            if (order.getIsCommission() == 1) {
                continue;
            }
            order.setIsCommission(1);
            orderService.updateById(order);
            R<Shop> r = shopClient.getShopById(order.getShopId());
            if (!R.isSuccess(r)) {
                throw new RuntimeException("获取门店信息失败");
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java
@@ -142,12 +142,6 @@
            }
            technician = shopdetail.getData();
        }
        R<TechnicianSubscribe> subscribeR = technicianClient.getSubscribeByOrderId(orderId);
        if (!R.isSuccess(subscribeR)){
            throw new ServiceException("获取预约信息失败");
        }
        TechnicianSubscribe subscribe = subscribeR.getData();
        Shop shop = shopR.getData();
        orderDetailVO.setId(order.getId());
        orderDetailVO.setOrderStatus(order.getOrderStatus());
@@ -172,7 +166,6 @@
        orderDetailVO.setLatitude(shop.getLatitude());
        orderDetailVO.setShopId(shop.getId());
        orderDetailVO.setTechnicianName(technician.getName());
        orderDetailVO.setTechnicianSubscribeId(String.valueOf(subscribe.getId()));
        return orderDetailVO;
    }
@@ -216,18 +209,6 @@
        order.setOrderStatus(OrderStatus.COMPLETED.getCode());
        orderMapper.updateById(order);
        Integer orderType = order.getOrderType();
        if (orderType.equals(OrderType.SERVICE.getCode())){
            R<TechnicianSubscribe> subscribeR = technicianClient.getSubscribeByOrderId(order.getId());
            if (R.isError(subscribeR)){
                throw new ServiceException("获取预约信息失败");
            }
            TechnicianSubscribe subscribe = subscribeR.getData();
            subscribe.setStatus(2);
            R<Void> r = technicianClient.updateStatus(subscribe.getStatus(), subscribe.getId());
            if (R.isError(r)){
                throw new ServiceException("更新预约状态失败");
            }
        }
        // 售后设置
        R<BaseSetting> baseSettingR = baseSettingClient.getBaseSetting(5);
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TechnicianSubscribeController.java
@@ -104,13 +104,5 @@
        return R.ok(technicianSubscribeService.getTechnicianSubscribeByUser(page, SecurityUtils.getUserId(), status));
    }
    @GetMapping("/getSubscribeByOrderId")
    @ApiOperation(value = "根据订单id获取预约信息", notes = "根据订单id获取预约信息", tags = {"后台-技师预约管理-根据订单id获取预约信息"})
    public R<TechnicianSubscribe> getSubscribeByOrderId(@ApiParam(value = "订单id") @RequestParam Long orderId) {
        return R.ok(technicianSubscribeService.getOne(new LambdaQueryWrapper<TechnicianSubscribe>()
                .eq(TechnicianSubscribe::getOrderId, orderId)));
    }
}
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TechnicianSubscribeServiceImpl.java
@@ -11,10 +11,12 @@
import com.ruoyi.other.mapper.TechnicianSubscribeMapper;
import com.ruoyi.other.service.TechnicianSubscribeService;
import com.ruoyi.other.vo.TechnicianSubscribeVO;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.List;
/**
@@ -31,6 +33,8 @@
    private TechnicianSubscribeMapper technicianSubscribeMapper;
    @Resource
    private RemoteOrderGoodsClient orderGoodsClient;
    @Resource
    private RedisTemplate<String, String> redisTemplate;
    @Override
    public List<TechnicianSubscribeVO> getTechnicianSubscribeByUserAndShop(Long shopId, Integer status) {
@@ -43,20 +47,17 @@
    @Override
    public void subscribe(TechnicianSubscribe subscribe) {
        if (StringUtils.isNotEmpty(subscribe.getIdStr())){
            subscribe.setId(Long.parseLong(subscribe.getIdStr()));
            technicianSubscribeMapper.updateById(subscribe);
        }else {
            Long userId = SecurityUtils.getUserId();
            subscribe.setAppUserId(userId);
            subscribe.setStatus(TechnicianStatus.UNSUBSCRIBE.getCode());
            subscribe.setDelFlag(0);
            subscribe.setCreateTime(LocalDateTime.now());
            technicianSubscribeMapper.insert(subscribe);
        }
        if (subscribe.getTechnicianId() != null){
        Long userId = SecurityUtils.getUserId();
        subscribe.setAppUserId(userId);
        subscribe.setStatus(TechnicianStatus.UNSUBSCRIBE.getCode());
        subscribe.setDelFlag(0);
        subscribe.setCreateTime(LocalDateTime.now());
        technicianSubscribeMapper.insert(subscribe);
        if (subscribe.getOrderId() != null){
            orderGoodsClient.subscribe(subscribe.getOrderId(), subscribe.getTechnicianId());
        }
        LocalDateTime subscribeTime = subscribe.getSubscribeTime();
        long deadlineTimestamp = subscribeTime.atZone(ZoneId.systemDefault()).toEpochSecond();
        redisTemplate.opsForZSet().add("delay_queue:subscribe", subscribe.getId().toString(), deadlineTimestamp);
    }
}