فهرست منبع

整改基本完成,差区域站点权限管理

Huanyi 3 هفته پیش
والد
کامیت
9f0976a4d2
35فایلهای تغییر یافته به همراه421 افزوده شده و 112 حذف شده
  1. 3 0
      ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteStoreService.java
  2. 2 0
      ruoyi-api/yingpaipay-api-fulfiller/src/main/java/org/dromara/fulfiller/api/RemoteFulfillerService.java
  3. 4 0
      ruoyi-api/yingpaipay-api-order/src/main/java/org/dromara/order/api/RemoteSubOrderLogService.java
  4. 2 0
      ruoyi-api/yingpaipay-api-order/src/main/java/org/dromara/order/api/RemoteSubOrderService.java
  5. 1 1
      ruoyi-auth/src/main/resources/application.yml
  6. 5 0
      ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/CacheNames.java
  7. 13 0
      ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/DateUtils.java
  8. 1 1
      ruoyi-modules/ruoyi-gen/src/main/resources/application.yml
  9. 4 0
      ruoyi-modules/ruoyi-job/pom.xml
  10. 31 0
      ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/FulfillerLevelPointsTask.java
  11. 36 0
      ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/StoreExpireTask.java
  12. 1 1
      ruoyi-modules/ruoyi-job/src/main/resources/application.yml
  13. 1 1
      ruoyi-modules/ruoyi-resource/src/main/resources/application.yml
  14. 32 0
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysUserAreaStation.java
  15. 2 0
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysUserBo.java
  16. 12 0
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteStoreServiceImpl.java
  17. 14 0
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysUserAreaStationMapper.java
  18. 6 0
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysAreaStationServiceImpl.java
  19. 1 1
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysStoreServiceImpl.java
  20. 10 3
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java
  21. 1 1
      ruoyi-modules/ruoyi-system/src/main/resources/application.yml
  22. 16 12
      ruoyi-modules/yingpaipay-archieves/src/main/java/org/dromara/archieves/service/impl/UsrPetServiceImpl.java
  23. 1 1
      ruoyi-modules/yingpaipay-archieves/src/main/resources/application.yml
  24. 109 10
      ruoyi-modules/yingpaipay-fulfiller/src/main/java/org/dromara/fulfiller/dubbo/RemoteFulfillerServiceImpl.java
  25. 4 4
      ruoyi-modules/yingpaipay-fulfiller/src/main/java/org/dromara/fulfiller/service/impl/FlfLogServiceImpl.java
  26. 1 1
      ruoyi-modules/yingpaipay-fulfiller/src/main/resources/application.yml
  27. 66 2
      ruoyi-modules/yingpaipay-order/src/main/java/org/dromara/order/dubbo/RemoteSubOrderLogServiceImpl.java
  28. 11 0
      ruoyi-modules/yingpaipay-order/src/main/java/org/dromara/order/dubbo/RemoteSubOrderServiceImpl.java
  29. 1 1
      ruoyi-modules/yingpaipay-order/src/main/resources/application.yml
  30. 3 13
      ruoyi-modules/yingpaipay-service/src/main/java/org/dromara/service/controller/SysServiceController.java
  31. 9 8
      ruoyi-modules/yingpaipay-service/src/main/java/org/dromara/service/dubbo/RemoteSysServiceServiceImpl.java
  32. 1 4
      ruoyi-modules/yingpaipay-service/src/main/java/org/dromara/service/service/ISysServiceService.java
  33. 9 46
      ruoyi-modules/yingpaipay-service/src/main/java/org/dromara/service/service/impl/SysServiceServiceImpl.java
  34. 1 1
      ruoyi-modules/yingpaipay-service/src/main/resources/application.yml
  35. 7 0
      script/sql/business/create.sql

+ 3 - 0
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteStoreService.java

@@ -10,4 +10,7 @@ public interface RemoteStoreService {
     List<RemoteStoreVo> getByIds(List<Long> storeIds);
     List<RemoteStoreVo> getByIds(List<Long> storeIds);
 
 
     List<Long> selectIdsByName(String name);
     List<Long> selectIdsByName(String name);
+
+    boolean expire();
+
 }
 }

+ 2 - 0
ruoyi-api/yingpaipay-api-fulfiller/src/main/java/org/dromara/fulfiller/api/RemoteFulfillerService.java

@@ -36,4 +36,6 @@ public interface RemoteFulfillerService {
     boolean settlement(Long fulfiller, Long price, String orderCode, Long orderId);
     boolean settlement(Long fulfiller, Long price, String orderCode, Long orderId);
 
 
     String getNameById(Long id);
     String getNameById(Long id);
+
+    boolean taskLevelPoints();
 }
 }

+ 4 - 0
ruoyi-api/yingpaipay-api-order/src/main/java/org/dromara/order/api/RemoteSubOrderLogService.java

@@ -6,4 +6,8 @@ import java.util.List;
 
 
 public interface RemoteSubOrderLogService {
 public interface RemoteSubOrderLogService {
     RemoteSubOrderLogCountVo getCountByFulfillerId(Long fulfillerId);
     RemoteSubOrderLogCountVo getCountByFulfillerId(Long fulfillerId);
+
+    int countOnTimeByFulfillerId(Long id);
+
+    long countCompletedLastMonthByFulfiller(Long id);
 }
 }

+ 2 - 0
ruoyi-api/yingpaipay-api-order/src/main/java/org/dromara/order/api/RemoteSubOrderService.java

@@ -26,4 +26,6 @@ public interface RemoteSubOrderService {
     List<RemoteSubOrderVo> selectByCustomerIds(List<Long> customerIds);
     List<RemoteSubOrderVo> selectByCustomerIds(List<Long> customerIds);
 
 
     String getCodeById(Long id);
     String getCodeById(Long id);
+
+    long countCompletedThisMonthByFulfiller(Long id);
 }
 }

+ 1 - 1
ruoyi-auth/src/main/resources/application.yml

@@ -1,6 +1,6 @@
 # Tomcat
 # Tomcat
 server:
 server:
-  port: 10000
+  port: 6000
 
 
 # Spring
 # Spring
 spring:
 spring:

+ 5 - 0
ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/CacheNames.java

@@ -140,4 +140,9 @@ public interface CacheNames {
      */
      */
     String SYS_TAG = "sys_tag#30d";
     String SYS_TAG = "sys_tag#30d";
 
 
+    /**
+     * 区域站点列表
+     * @Author: Huanyi
+     */
+    String SYS_AREA_STATION = "sys_area_station#30d";
 }
 }

+ 13 - 0
ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/DateUtils.java

@@ -375,4 +375,17 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
         return DateUtil.format(date, "MM-dd HH:mm");
         return DateUtil.format(date, "MM-dd HH:mm");
     }
     }
 
 
+    public static Date getFirstDayOfMonth() {
+        LocalDate firstDayOfMonth = LocalDate.now().withDayOfMonth(1);
+        LocalDateTime startOfDay = firstDayOfMonth.atStartOfDay();
+        return Date.from(startOfDay.atZone(ZoneId.systemDefault()).toInstant());
+    }
+
+    public static Date getFirstDayOfLastMonth() {
+        LocalDate lastMonth = LocalDate.now().minusMonths(1);
+        LocalDate firstDayOfLastMonth = lastMonth.withDayOfMonth(1);
+        LocalDateTime startOfDay = firstDayOfLastMonth.atStartOfDay();
+        return Date.from(startOfDay.atZone(ZoneId.systemDefault()).toInstant());
+    }
+
 }
 }

+ 1 - 1
ruoyi-modules/ruoyi-gen/src/main/resources/application.yml

@@ -1,6 +1,6 @@
 # Tomcat
 # Tomcat
 server:
 server:
-  port: 10008
+  port: 6008
 
 
 # Spring
 # Spring
 spring:
 spring:

+ 4 - 0
ruoyi-modules/ruoyi-job/pom.xml

@@ -69,6 +69,10 @@
             <groupId>org.dromara</groupId>
             <groupId>org.dromara</groupId>
             <artifactId>ruoyi-api-system</artifactId>
             <artifactId>ruoyi-api-system</artifactId>
         </dependency>
         </dependency>
+        <dependency>
+            <groupId>org.dromara</groupId>
+            <artifactId>yingpaipay-api-fulfiller</artifactId>
+        </dependency>
 
 
     </dependencies>
     </dependencies>
 
 

+ 31 - 0
ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/FulfillerLevelPointsTask.java

@@ -0,0 +1,31 @@
+package org.dromara.job.snailjob;
+
+import com.aizuda.snailjob.client.job.core.annotation.JobExecutor;
+import com.aizuda.snailjob.client.job.core.dto.JobArgs;
+import com.aizuda.snailjob.model.dto.ExecuteResult;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.dromara.fulfiller.api.RemoteFulfillerService;
+import org.springframework.stereotype.Component;
+
+@Component
+@JobExecutor(name = "fulfillerLevelPointsTask")
+public class FulfillerLevelPointsTask {
+
+    @DubboReference
+    private RemoteFulfillerService remoteFulfillerService;
+
+    public ExecuteResult jobExecute(JobArgs jobArgs) {
+
+        try {
+            boolean flag = remoteFulfillerService.taskLevelPoints();
+            if (!flag) {
+                return ExecuteResult.failure("履约者等级积分处理任务执行失败");
+            }
+        } catch (Exception e) {
+            return ExecuteResult.failure("履约者等级积分处理任务执行失败 : " + e);
+        }
+
+        return ExecuteResult.success("履约者等级积分处理任务执行成功");
+    }
+
+}

+ 36 - 0
ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/StoreExpireTask.java

@@ -0,0 +1,36 @@
+package org.dromara.job.snailjob;
+
+import com.aizuda.snailjob.client.job.core.annotation.JobExecutor;
+import com.aizuda.snailjob.client.job.core.dto.JobArgs;
+import com.aizuda.snailjob.model.dto.ExecuteResult;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.dromara.system.api.RemoteStoreService;
+import org.springframework.stereotype.Component;
+
+/**
+ * 门店状态转换的定时任务
+ */
+
+@Component
+@JobExecutor(name = "storeExpireTask")
+public class StoreExpireTask {
+
+    @DubboReference
+    private RemoteStoreService remoteStoreService;
+
+    public ExecuteResult jobExecute(JobArgs jobArgs) {
+
+        try {
+            boolean flag = remoteStoreService.expire();
+            if (!flag) {
+                return ExecuteResult.failure("门店到期任务执行失败");
+            }
+        } catch (Exception e) {
+            return ExecuteResult.failure("门店到期任务执行失败 : " + e);
+        }
+
+
+        return ExecuteResult.success("门店到期任务执行成功");
+    }
+
+}

+ 1 - 1
ruoyi-modules/ruoyi-job/src/main/resources/application.yml

@@ -1,6 +1,6 @@
 # Tomcat
 # Tomcat
 server:
 server:
-  port: 10007
+  port: 6007
 
 
 # Spring
 # Spring
 spring:
 spring:

+ 1 - 1
ruoyi-modules/ruoyi-resource/src/main/resources/application.yml

@@ -1,6 +1,6 @@
 # Tomcat
 # Tomcat
 server:
 server:
-  port: 10002
+  port: 6002
 
 
 # Spring
 # Spring
 spring:
 spring:

+ 32 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysUserAreaStation.java

@@ -0,0 +1,32 @@
+package org.dromara.system.domain;
+
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+
+/**
+ * 等级配置权益关联对象 sys_user_area_station
+ *
+ * @author Huanyi
+ * @date 2026-03-19
+ */
+@Data
+@TableName("sys_user_area_station")
+public class SysUserAreaStation {
+
+    /**
+     * 系统用户ID
+     */
+    @TableId(value = "sys_user_id", type = IdType.INPUT)
+    private Long sysUserId;
+
+    /**
+     * 区域站点ID
+     */
+    private Long areaStationId;
+
+
+}

+ 2 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysUserBo.java

@@ -125,6 +125,8 @@ public class SysUserBo extends BaseEntity {
      */
      */
     private Long avatar;
     private Long avatar;
 
 
+    private String content;
+
     public SysUserBo(Long userId) {
     public SysUserBo(Long userId) {
         this.userId = userId;
         this.userId = userId;
     }
     }

+ 12 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteStoreServiceImpl.java

@@ -8,12 +8,14 @@ import org.dromara.common.tenant.helper.TenantHelper;
 import org.dromara.system.api.RemoteStoreService;
 import org.dromara.system.api.RemoteStoreService;
 import org.dromara.system.api.domain.vo.RemoteStoreVo;
 import org.dromara.system.api.domain.vo.RemoteStoreVo;
 import org.dromara.system.domain.SysStore;
 import org.dromara.system.domain.SysStore;
+import org.dromara.system.enums.SysStoreStatusEnum;
 import org.dromara.system.mapper.SysStoreMapper;
 import org.dromara.system.mapper.SysStoreMapper;
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Collections;
+import java.util.Date;
 import java.util.List;
 import java.util.List;
 import java.util.concurrent.atomic.AtomicReference;
 import java.util.concurrent.atomic.AtomicReference;
 
 
@@ -65,4 +67,14 @@ public class RemoteStoreServiceImpl implements RemoteStoreService {
         ).forEach(e -> ids.add(e.getId()));
         ).forEach(e -> ids.add(e.getId()));
         return ids;
         return ids;
     }
     }
+
+    @Override
+    public boolean expire() {
+        return baseMapper.update(
+            Wrappers.lambdaUpdate(SysStore.class)
+                .eq(SysStore::getStatus, SysStoreStatusEnum.IN_OPERATION.getValue())
+                .lt(SysStore::getValidity, new Date())
+                .set(SysStore::getStatus, SysStoreStatusEnum.DUE.getValue())
+        ) > 0;
+    }
 }
 }

+ 14 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysUserAreaStationMapper.java

@@ -0,0 +1,14 @@
+package org.dromara.system.mapper;
+
+import org.dromara.system.domain.SysUserAreaStation;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 等级配置权益关联Mapper接口
+ *
+ * @author Huanyi
+ * @date 2026-03-19
+ */
+public interface SysUserAreaStationMapper extends BaseMapperPlus<SysUserAreaStation, SysUserAreaStation> {
+
+}

+ 6 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysAreaStationServiceImpl.java

@@ -13,6 +13,8 @@ import org.dromara.system.domain.vo.SysAreaStationStatusVo;
 import org.dromara.system.domain.vo.SysAreaStationTypeVo;
 import org.dromara.system.domain.vo.SysAreaStationTypeVo;
 import org.dromara.system.enums.AreaStationStatusEnum;
 import org.dromara.system.enums.AreaStationStatusEnum;
 import org.dromara.system.enums.AreaStationTypeEnum;
 import org.dromara.system.enums.AreaStationTypeEnum;
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.dromara.system.domain.bo.SysAreaStationBo;
 import org.dromara.system.domain.bo.SysAreaStationBo;
 import org.dromara.system.domain.vo.SysAreaStationVo;
 import org.dromara.system.domain.vo.SysAreaStationVo;
@@ -55,6 +57,7 @@ public class SysAreaStationServiceImpl implements ISysAreaStationService {
      * @param bo 查询条件
      * @param bo 查询条件
      * @return 区域站点列表
      * @return 区域站点列表
      */
      */
+    @Cacheable(cacheNames = CacheNames.SYS_AREA_STATION)
     @Override
     @Override
     public List<SysAreaStationVo> queryList(SysAreaStationBo bo) {
     public List<SysAreaStationVo> queryList(SysAreaStationBo bo) {
         LambdaQueryWrapper<SysAreaStation> lqw = buildQueryWrapper(bo);
         LambdaQueryWrapper<SysAreaStation> lqw = buildQueryWrapper(bo);
@@ -74,6 +77,7 @@ public class SysAreaStationServiceImpl implements ISysAreaStationService {
      * @param bo 区域站点
      * @param bo 区域站点
      * @return 是否新增成功
      * @return 是否新增成功
      */
      */
+    @CacheEvict(cacheNames = CacheNames.SYS_AREA_STATION)
     @Override
     @Override
     public Boolean insertByBo(SysAreaStationBo bo) {
     public Boolean insertByBo(SysAreaStationBo bo) {
         SysAreaStation add = MapstructUtils.convert(bo, SysAreaStation.class);
         SysAreaStation add = MapstructUtils.convert(bo, SysAreaStation.class);
@@ -92,6 +96,7 @@ public class SysAreaStationServiceImpl implements ISysAreaStationService {
      * @param bo 区域站点
      * @param bo 区域站点
      * @return 是否修改成功
      * @return 是否修改成功
      */
      */
+    @CacheEvict(cacheNames = CacheNames.SYS_AREA_STATION)
     @Override
     @Override
     public Boolean updateByBo(SysAreaStationBo bo) {
     public Boolean updateByBo(SysAreaStationBo bo) {
         SysAreaStation update = MapstructUtils.convert(bo, SysAreaStation.class);
         SysAreaStation update = MapstructUtils.convert(bo, SysAreaStation.class);
@@ -114,6 +119,7 @@ public class SysAreaStationServiceImpl implements ISysAreaStationService {
      * @param isValid 是否进行有效性校验
      * @param isValid 是否进行有效性校验
      * @return 是否删除成功
      * @return 是否删除成功
      */
      */
+    @CacheEvict(cacheNames = CacheNames.SYS_AREA_STATION)
     @Override
     @Override
     public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
     public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
         if(isValid){
         if(isValid){

+ 1 - 1
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysStoreServiceImpl.java

@@ -285,7 +285,7 @@ public class SysStoreServiceImpl implements ISysStoreService {
 
 
         Page<SysStore> page = baseMapper.selectPage(
         Page<SysStore> page = baseMapper.selectPage(
             pageQuery.build(),
             pageQuery.build(),
-            Wrappers.lambdaQuery(SysStore.class).like(StringUtils.isNotBlank(name), SysStore::getName, name).eq(site != null, SysStore::getSite, site)
+            Wrappers.lambdaQuery(SysStore.class).like(StringUtils.isNotBlank(name), SysStore::getName, name).eq(site != null, SysStore::getSite, site).eq(SysStore::getStatus, SysStoreStatusEnum.IN_OPERATION.getValue())
         );
         );
 
 
         List<Long> ids = new ArrayList<>();
         List<Long> ids = new ArrayList<>();

+ 10 - 3
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java

@@ -65,7 +65,10 @@ public class SysUserServiceImpl implements ISysUserService {
     @Override
     @Override
     public TableDataInfo<SysUserVo> selectPageUserList(SysUserBo user, PageQuery pageQuery) {
     public TableDataInfo<SysUserVo> selectPageUserList(SysUserBo user, PageQuery pageQuery) {
         Page<SysUserVo> page = baseMapper.selectPageUserList(pageQuery.build(), this.buildQueryWrapper(user));
         Page<SysUserVo> page = baseMapper.selectPageUserList(pageQuery.build(), this.buildQueryWrapper(user));
-        return TableDataInfo.build(page);
+        return TableDataInfo.build(page.convert(e -> {
+            e.setRoles(roleMapper.selectRolesByUserId(e.getUserId()));
+            return e;
+        }));
     }
     }
 
 
     /**
     /**
@@ -96,6 +99,10 @@ public class SysUserServiceImpl implements ISysUserService {
         Map<String, Object> params = user.getParams();
         Map<String, Object> params = user.getParams();
         LambdaQueryWrapper<SysUser> wrapper = Wrappers.lambdaQuery();
         LambdaQueryWrapper<SysUser> wrapper = Wrappers.lambdaQuery();
         wrapper.eq(SysUser::getDelFlag, SystemConstants.NORMAL)
         wrapper.eq(SysUser::getDelFlag, SystemConstants.NORMAL)
+            .and(StringUtils.isNotBlank(user.getContent()), w -> w
+                .like(SysUser::getNickName, user.getContent())
+                .or()
+                .like(SysUser::getPhonenumber, user.getContent()))
             // 根据平台ID划分用户 @author: Huanyi
             // 根据平台ID划分用户 @author: Huanyi
             .eq(SysUser::getPlatformId, PlatformUtils.getId())
             .eq(SysUser::getPlatformId, PlatformUtils.getId())
             .eq(ObjectUtil.isNotNull(user.getUserId()), SysUser::getUserId, user.getUserId())
             .eq(ObjectUtil.isNotNull(user.getUserId()), SysUser::getUserId, user.getUserId())
@@ -203,7 +210,7 @@ public class SysUserServiceImpl implements ISysUserService {
     @Override
     @Override
     public List<SysUserVo> selectUserByIds(List<Long> userIds, Long deptId) {
     public List<SysUserVo> selectUserByIds(List<Long> userIds, Long deptId) {
         return baseMapper.selectUserList(new LambdaQueryWrapper<SysUser>()
         return baseMapper.selectUserList(new LambdaQueryWrapper<SysUser>()
-            .select(SysUser::getUserId, SysUser::getUserName, SysUser::getNickName, SysUser::getEmail, SysUser::getPhonenumber)            .eq(SysUser::getStatus, SystemConstants.NORMAL)
+            .select(SysUser::getUserId, SysUser::getUserName, SysUser::getNickName, SysUser::getEmail, SysUser::getPhonenumber).eq(SysUser::getStatus, SystemConstants.NORMAL)
             .eq(ObjectUtil.isNotNull(deptId), SysUser::getDeptId, deptId)
             .eq(ObjectUtil.isNotNull(deptId), SysUser::getDeptId, deptId)
             .in(CollUtil.isNotEmpty(userIds), SysUser::getUserId, userIds));
             .in(CollUtil.isNotEmpty(userIds), SysUser::getUserId, userIds));
     }
     }
@@ -341,7 +348,7 @@ public class SysUserServiceImpl implements ISysUserService {
         if (clean) {
         if (clean) {
             userStoreMapper.delete(Wrappers.lambdaQuery(SysUserStore.class).eq(SysUserStore::getUserId, user.getUserId()));
             userStoreMapper.delete(Wrappers.lambdaQuery(SysUserStore.class).eq(SysUserStore::getUserId, user.getUserId()));
         }
         }
-        if (user.getStoreIds().length == 0) {
+        if (user.getStoreIds() == null || user.getStoreIds().length == 0) {
             return;
             return;
         }
         }
         List<SysUserStore> list = Arrays.stream(user.getStoreIds())
         List<SysUserStore> list = Arrays.stream(user.getStoreIds())

+ 1 - 1
ruoyi-modules/ruoyi-system/src/main/resources/application.yml

@@ -1,6 +1,6 @@
 # Tomcat
 # Tomcat
 server:
 server:
-  port: 10001
+  port: 6001
 
 
 # Spring
 # Spring
 spring:
 spring:

+ 16 - 12
ruoyi-modules/yingpaipay-archieves/src/main/java/org/dromara/archieves/service/impl/UsrPetServiceImpl.java

@@ -127,20 +127,24 @@ public class UsrPetServiceImpl implements IUsrPetService {
     @Override
     @Override
     @Transactional(rollbackFor = Exception.class)
     @Transactional(rollbackFor = Exception.class)
     public Boolean insertByBo(UsrPetBo bo) {
     public Boolean insertByBo(UsrPetBo bo) {
-        UsrPet add = MapstructUtils.convert(bo, UsrPet.class);
-        add.setPlatformId(PlatformUtils.getId());
-        validEntityBeforeSave(add);
-        add.setTenantId(TenantHelper.getTenantId());
-        boolean flag = baseMapper.insert(add) > 0;
-        if (flag) {
-            bo.setId(add.getId());
-            saveTagRels(add.getId(), bo.getTagIds(), TagTargetConstants.PET);
+        // 系统莫名其妙会直接将tenantId设置为空? @auhtor: Huanyi
+        return TenantHelper.ignore(() -> {
+            UsrPet add = MapstructUtils.convert(bo, UsrPet.class);
+            add.setPlatformId(PlatformUtils.getId());
+            validEntityBeforeSave(add);
+            UsrCustomer customer = customerMapper.selectById(bo.getUserId());
+            add.setTenantId(customer.getTenantId());
+            boolean flag = baseMapper.insert(add) > 0;
+            if (flag) {
+                bo.setId(add.getId());
+                saveTagRels(add.getId(), bo.getTagIds(), TagTargetConstants.PET);
 //            // 更新用户宠物数量
 //            // 更新用户宠物数量
 //            updateCustomerPetCount(bo.getUserId());
 //            updateCustomerPetCount(bo.getUserId());
-            // 记录到用户的档案日志
-            arcChangeLogService.addLog(bo.getUserId(), TagTargetConstants.CUSTOMER, "新增宠物", "新增宠物档案 (" + bo.getName() + ")");
-        }
-        return flag;
+                // 记录到用户的档案日志
+                arcChangeLogService.addLog(bo.getUserId(), TagTargetConstants.CUSTOMER, "新增宠物", "新增宠物档案 (" + bo.getName() + ")");
+            }
+            return flag;
+        });
     }
     }
 
 
     @Override
     @Override

+ 1 - 1
ruoyi-modules/yingpaipay-archieves/src/main/resources/application.yml

@@ -1,6 +1,6 @@
 # Tomcat
 # Tomcat
 server:
 server:
-  port: 10003
+  port: 6003
 
 
 # Spring
 # Spring
 spring:
 spring:

+ 109 - 10
ruoyi-modules/yingpaipay-fulfiller/src/main/java/org/dromara/fulfiller/dubbo/RemoteFulfillerServiceImpl.java

@@ -3,31 +3,32 @@ package org.dromara.fulfiller.dubbo;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.RequiredArgsConstructor;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.DubboReference;
 import org.apache.dubbo.config.annotation.DubboService;
 import org.apache.dubbo.config.annotation.DubboService;
 import org.dromara.common.core.constant.CacheNames;
 import org.dromara.common.core.constant.CacheNames;
 import org.dromara.common.core.exception.user.UserException;
 import org.dromara.common.core.exception.user.UserException;
+import org.dromara.common.core.utils.DateUtils;
 import org.dromara.common.external.timor.TimorClient;
 import org.dromara.common.external.timor.TimorClient;
 import org.dromara.common.tenant.helper.TenantHelper;
 import org.dromara.common.tenant.helper.TenantHelper;
 import org.dromara.fulfiller.api.RemoteFulfillerService;
 import org.dromara.fulfiller.api.RemoteFulfillerService;
 import org.dromara.fulfiller.api.domain.vo.RemoteFulfillerVo;
 import org.dromara.fulfiller.api.domain.vo.RemoteFulfillerVo;
 import org.dromara.fulfiller.api.model.FulfillerLoginUser;
 import org.dromara.fulfiller.api.model.FulfillerLoginUser;
 import org.dromara.fulfiller.constants.FlfActionTypeConstant;
 import org.dromara.fulfiller.constants.FlfActionTypeConstant;
-import org.dromara.fulfiller.domain.FlfBalanceLog;
-import org.dromara.fulfiller.domain.FlfFulfiller;
-import org.dromara.fulfiller.domain.FlfPointsLog;
+import org.dromara.fulfiller.domain.*;
+import org.dromara.fulfiller.domain.vo.FlfLevelConfigVo;
 import org.dromara.fulfiller.enums.FlfBalanceBizTypeEnum;
 import org.dromara.fulfiller.enums.FlfBalanceBizTypeEnum;
 import org.dromara.fulfiller.enums.FlfFulfillerStatusEnum;
 import org.dromara.fulfiller.enums.FlfFulfillerStatusEnum;
 import org.dromara.fulfiller.enums.FlfPointsBizTypeEnum;
 import org.dromara.fulfiller.enums.FlfPointsBizTypeEnum;
-import org.dromara.fulfiller.mapper.FlfBalanceLogMapper;
-import org.dromara.fulfiller.mapper.FlfFulfillerMapper;
-import org.dromara.fulfiller.mapper.FlfPointsLogMapper;
+import org.dromara.fulfiller.mapper.*;
+import org.dromara.fulfiller.service.IFlfLevelConfigService;
+import org.dromara.order.api.RemoteSubOrderLogService;
+import org.dromara.order.api.RemoteSubOrderService;
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
+import java.util.concurrent.atomic.AtomicInteger;
 
 
 /**
 /**
  * 履约者服务实现
  * 履约者服务实现
@@ -43,6 +44,15 @@ public class RemoteFulfillerServiceImpl implements RemoteFulfillerService {
     private final FlfFulfillerMapper fulfillerMapper;
     private final FlfFulfillerMapper fulfillerMapper;
     private final FlfBalanceLogMapper balanceLogMapper;
     private final FlfBalanceLogMapper balanceLogMapper;
     private final FlfPointsLogMapper pointsLogMapper;
     private final FlfPointsLogMapper pointsLogMapper;
+    private final FlfComplaintLogMapper complaintLogMapper;
+    private final FlfViolationLogMapper violationLogMapper;
+
+    private final IFlfLevelConfigService levelConfigService;
+
+    @DubboReference
+    private final RemoteSubOrderService remoteSubOrderService;
+    @DubboReference
+    private final RemoteSubOrderLogService remoteSubOrderLogService;
 
 
     @Override
     @Override
     public FulfillerLoginUser getFulfillerByPhone(String phone) throws UserException {
     public FulfillerLoginUser getFulfillerByPhone(String phone) throws UserException {
@@ -161,6 +171,95 @@ public class RemoteFulfillerServiceImpl implements RemoteFulfillerService {
         ).getName();
         ).getName();
     }
     }
 
 
+    @Override
+    public boolean taskLevelPoints() {
+
+        List<FlfFulfiller> fulfillers = fulfillerMapper.selectList();
+
+        Map<Integer, FlfLevelConfigVo> configMap = new HashMap<>();
+        levelConfigService.listAll().forEach(e -> configMap.put(e.getLvNo(), e));
+        for (FlfFulfiller fulfiller : fulfillers) {
+            FlfLevelConfigVo config = configMap.get(fulfiller.getLevel());
+
+            long count = remoteSubOrderLogService.countCompletedLastMonthByFulfiller(fulfiller.getId());
+            int onTimeCount = remoteSubOrderLogService.countOnTimeByFulfillerId(fulfiller.getId());
+            long complaintCount = complaintLogMapper.selectCount(
+                Wrappers.lambdaQuery(FlfComplaintLog.class)
+                    .eq(FlfComplaintLog::getFulfiller, fulfiller.getId())
+                    .ge(FlfComplaintLog::getCreateTime, DateUtils.getFirstDayOfLastMonth())
+            );
+            AtomicInteger violationCount = new AtomicInteger();
+            violationLogMapper.selectList(
+                Wrappers.lambdaQuery(FlfViolationLog.class)
+                    .eq(FlfViolationLog::getFulfiller, fulfiller.getId())
+                    .ge(FlfViolationLog::getViolationTime, DateUtils.getFirstDayOfLastMonth())
+            ).forEach(e -> violationCount.addAndGet(e.getCount()));
+
+            log.info("""
+                    骑手{}查询结果:
+                    总订单数: {}
+                    按时数: {}
+                    投诉数: {}
+                    违规数: {}
+                    """, fulfiller.getName(), count, onTimeCount, complaintCount, violationCount.get());
+            /**
+             * 先进行积分处理
+             */
+            // 上门准时率低于a%,自动扣罚积分x
+            if (onTimeCount * 10000 < config.getDegradeOntimeRate()) {
+                fulfiller.setPoints(fulfiller.getPoints() - config.getDegradeOntimeRateScore());
+            }
+            // 完成订单为y,自动扣罚积分y2
+            if (count < config.getDegradeCompleteOrderQuality()) {
+                fulfiller.setPoints(fulfiller.getPoints() - config.getDegradeCompleteOrderQualityScore());
+            }
+            // 投诉率达到a%,自动扣罚积分x
+            if (complaintCount * 10000 >= config.getDegradeComplaintCount()) {
+                fulfiller.setPoints(fulfiller.getPoints() - config.getDegradeComplaintCountScore());
+            }
+
+            /**
+             * 然后进行等级处理
+             */
+            if (fulfiller.getPoints() < config.getDegradePoints()) {
+                log.info("骑手{}积分不足,降级", fulfiller.getName());
+                fulfiller.setLevel(config.getLvNo() - 1);
+            } else {
+                config = configMap.get(config.getLvNo() + 1);
+                // 达到y5积分数量
+                if (fulfiller.getPoints() < config.getUpgradePoints()) {
+                    log.info("骑手{}有{}积分,未达到{}积分,无法升级", fulfiller.getName(), fulfiller.getPoints(), config.getUpgradePoints());
+                    continue;
+                }
+                // 完成y1单量
+                if (config.getUpgradeCompleteOrderQuality() > count) {
+                    log.info("骑手{}完成{}单,未达到{}单量,无法升级", fulfiller.getName(), count, config.getUpgradeCompleteOrderQuality());
+                    continue;
+                }
+                // 达到y2准时率
+                if (onTimeCount * 100L * 100 / count < config.getUpgradeOntimeRate()) {
+                    log.info("骑手{}准时率为{},未达到{}准时率,无法升级", fulfiller.getName(), onTimeCount * 100L * 100 / count, config.getUpgradeOntimeRate());
+                    continue;
+                }
+                // 达到y3投诉率
+                if (complaintCount * 10000L / count > config.getUpgradeComplaintRate()) {
+                    log.info("骑手{}投诉率为{},超过{},无法升级", fulfiller.getName(), complaintCount * 10000L / count, config.getUpgradeComplaintRate());
+                    continue;
+                }
+                // 低于y4违规次数
+                if (violationCount.get() >= config.getUpgradeViolationsCount()) {
+                    log.info("骑手{}违规次数为{},超过{}次,无法升级", fulfiller.getName(), violationCount.get(), config.getUpgradeViolationsCount());
+                    continue;
+                }
+
+                fulfiller.setLevel(config.getLvNo());
+            }
+
+        }
+
+        return fulfillerMapper.updateBatchById(fulfillers);
+    }
+
     /**
     /**
      * 手动转换 FlfFulfiller → FulfillerLoginUser(避免跨模块 MapStruct 转换器缺失)
      * 手动转换 FlfFulfiller → FulfillerLoginUser(避免跨模块 MapStruct 转换器缺失)
      */
      */

+ 4 - 4
ruoyi-modules/yingpaipay-fulfiller/src/main/java/org/dromara/fulfiller/service/impl/FlfLogServiceImpl.java

@@ -158,17 +158,17 @@ public class FlfLogServiceImpl implements IFlfLogService {
 
 
         rewardLogMapper.selectList(
         rewardLogMapper.selectList(
             Wrappers.lambdaQuery(FlfRewardLog.class).eq(FlfRewardLog::getFulfillerId, userId)
             Wrappers.lambdaQuery(FlfRewardLog.class).eq(FlfRewardLog::getFulfillerId, userId)
-                .isNotNull(FlfRewardLog::getSubOrderId).eq(FlfRewardLog::getTarget, FlfRewardTargetConstant.BALANCE)
+                .eq(FlfRewardLog::getTarget, FlfRewardTargetConstant.BALANCE)
                 .between(FlfRewardLog::getCreateTime, date.get(START_DATE), date.get(LAST_DATE))
                 .between(FlfRewardLog::getCreateTime, date.get(START_DATE), date.get(LAST_DATE))
         ).forEach(e -> {
         ).forEach(e -> {
             if (e.getType().equals(FlfActionTypeConstant.ADD)) {
             if (e.getType().equals(FlfActionTypeConstant.ADD)) {
                 rewardBalance.addAndGet(e.getAmount());
                 rewardBalance.addAndGet(e.getAmount());
-                if (!reward.contains(e.getSubOrderId())) {
+                if (e.getSubOrderId() != null && !reward.contains(e.getSubOrderId())) {
                     reward.add(e.getSubOrderId());
                     reward.add(e.getSubOrderId());
                 }
                 }
             } else {
             } else {
                 punishBalance.addAndGet(e.getAmount());
                 punishBalance.addAndGet(e.getAmount());
-                if (!punish.contains(e.getSubOrderId())) {
+                if (e.getSubOrderId() != null && !punish.contains(e.getSubOrderId())) {
                     punish.add(e.getSubOrderId());
                     punish.add(e.getSubOrderId());
                 }
                 }
             }
             }
@@ -190,7 +190,7 @@ public class FlfLogServiceImpl implements IFlfLogService {
 
 
         rewardLogMapper.selectList(
         rewardLogMapper.selectList(
             Wrappers.lambdaQuery(FlfRewardLog.class).eq(FlfRewardLog::getFulfillerId, userId)
             Wrappers.lambdaQuery(FlfRewardLog.class).eq(FlfRewardLog::getFulfillerId, userId)
-                .isNotNull(FlfRewardLog::getSubOrderId).eq(FlfRewardLog::getTarget, FlfRewardTargetConstant.BALANCE)
+                .eq(FlfRewardLog::getTarget, FlfRewardTargetConstant.BALANCE)
                 .between(FlfRewardLog::getCreateTime, date.get(START_DATE), date.get(LAST_DATE))
                 .between(FlfRewardLog::getCreateTime, date.get(START_DATE), date.get(LAST_DATE))
         ).forEach(e -> {
         ).forEach(e -> {
             FlfRewardListOnAppRewardVo vo = new FlfRewardListOnAppRewardVo();
             FlfRewardListOnAppRewardVo vo = new FlfRewardListOnAppRewardVo();

+ 1 - 1
ruoyi-modules/yingpaipay-fulfiller/src/main/resources/application.yml

@@ -1,6 +1,6 @@
 # Tomcat
 # Tomcat
 server:
 server:
-  port: 10004
+  port: 6004
 
 
 # Spring
 # Spring
 spring:
 spring:

+ 66 - 2
ruoyi-modules/yingpaipay-order/src/main/java/org/dromara/order/dubbo/RemoteSubOrderLogServiceImpl.java

@@ -3,17 +3,21 @@ package org.dromara.order.dubbo;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.RequiredArgsConstructor;
 import lombok.RequiredArgsConstructor;
 import org.apache.dubbo.config.annotation.DubboService;
 import org.apache.dubbo.config.annotation.DubboService;
+import org.dromara.common.core.utils.DateUtils;
 import org.dromara.order.api.RemoteSubOrderLogService;
 import org.dromara.order.api.RemoteSubOrderLogService;
 import org.dromara.order.api.domain.vo.RemoteSubOrderLogCountVo;
 import org.dromara.order.api.domain.vo.RemoteSubOrderLogCountVo;
+import org.dromara.order.domain.SysSubOrder;
 import org.dromara.order.domain.SysSubOrderLog;
 import org.dromara.order.domain.SysSubOrderLog;
 import org.dromara.order.enums.OrderLogActionerTypeEnum;
 import org.dromara.order.enums.OrderLogActionerTypeEnum;
 import org.dromara.order.enums.OrderLogFulfillerStepEnum;
 import org.dromara.order.enums.OrderLogFulfillerStepEnum;
 import org.dromara.order.enums.OrderLogTypeEnum;
 import org.dromara.order.enums.OrderLogTypeEnum;
+import org.dromara.order.enums.OrderStatusEnum;
 import org.dromara.order.mapper.SysSubOrderLogMapper;
 import org.dromara.order.mapper.SysSubOrderLogMapper;
+import org.dromara.order.mapper.SysSubOrderMapper;
+import org.springframework.core.annotation.Order;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
-import java.util.ArrayList;
-import java.util.List;
+import java.util.*;
 
 
 @DubboService
 @DubboService
 @Service
 @Service
@@ -21,6 +25,7 @@ import java.util.List;
 public class RemoteSubOrderLogServiceImpl implements RemoteSubOrderLogService {
 public class RemoteSubOrderLogServiceImpl implements RemoteSubOrderLogService {
 
 
     private final SysSubOrderLogMapper baseMapper;
     private final SysSubOrderLogMapper baseMapper;
+    private final SysSubOrderMapper sysSubOrderMapper;
 
 
     @Override
     @Override
     public RemoteSubOrderLogCountVo getCountByFulfillerId(Long fulfillerId) {
     public RemoteSubOrderLogCountVo getCountByFulfillerId(Long fulfillerId) {
@@ -50,4 +55,63 @@ public class RemoteSubOrderLogServiceImpl implements RemoteSubOrderLogService {
 
 
         return vo;
         return vo;
     }
     }
+
+    @Override
+    public int countOnTimeByFulfillerId(Long id) {
+
+        int count = 0;
+
+        List<SysSubOrder> orders = sysSubOrderMapper.selectList(
+            Wrappers.lambdaQuery(SysSubOrder.class)
+                .eq(SysSubOrder::getFulfiller, id)
+                .eq(SysSubOrder::getStatus, OrderStatusEnum.COMPLETED.getValue())
+                .ge(SysSubOrder::getCreateTime, DateUtils.getFirstDayOfLastMonth())
+        );
+        Map<Long, SysSubOrderLog> logMap = new HashMap<>();
+        baseMapper.selectList(
+            Wrappers.lambdaQuery(SysSubOrderLog.class)
+                .eq(SysSubOrderLog::getStep, 1)
+                .eq(SysSubOrderLog::getActionerType, OrderLogActionerTypeEnum.FULFILLER.getValue())
+                .eq(SysSubOrderLog::getActioner, id)
+                .ge(SysSubOrderLog::getCreateTime, DateUtils.getFirstDayOfLastMonth())
+        ).forEach(e -> logMap.put(e.getSubOrderId(), e));
+
+        for (SysSubOrder order : orders) {
+            SysSubOrderLog log = logMap.get(order.getId());
+            if (!order.getServiceTime().before(log.getCreateTime())) {
+                count++;
+            }
+        }
+
+        return count;
+    }
+
+    @Override
+    public long countCompletedLastMonthByFulfiller(Long id) {
+
+        List<SysSubOrderLog> logs = baseMapper.selectList(
+            Wrappers.lambdaQuery(SysSubOrderLog.class)
+                .select(SysSubOrderLog::getSubOrderId)
+                .eq(SysSubOrderLog::getActionerType, OrderLogActionerTypeEnum.FULFILLER.getValue())
+                .eq(SysSubOrderLog::getActioner, id)
+                .eq(SysSubOrderLog::getStep, OrderLogFulfillerStepEnum.COMPLETED.getStep())
+                .ge(SysSubOrderLog::getCreateTime, DateUtils.getFirstDayOfLastMonth())
+        );
+
+        if (logs.isEmpty()) {
+            return 0L;
+        }
+
+        return logs.stream()
+            .map(SysSubOrderLog::getSubOrderId)
+            .filter(Objects::nonNull)
+            .distinct()
+            .count();
+
+//        return baseMapper.selectCount(
+//            Wrappers.lambdaQuery(SysSubOrderLog.class)
+//                .eq(SysSubOrderLog::getStep, OrderLogFulfillerStepEnum.COMPLETED.getStep())
+//                .ge(SysSubOrderLog::getCreateTime, DateUtils.getFirstDayOfMonth())
+//        );
+    }
 }
 }

+ 11 - 0
ruoyi-modules/yingpaipay-order/src/main/java/org/dromara/order/dubbo/RemoteSubOrderServiceImpl.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.RequiredArgsConstructor;
 import lombok.RequiredArgsConstructor;
 import org.apache.dubbo.config.annotation.DubboService;
 import org.apache.dubbo.config.annotation.DubboService;
 import org.dromara.common.core.constant.CacheNames;
 import org.dromara.common.core.constant.CacheNames;
+import org.dromara.common.core.utils.DateUtils;
 import org.dromara.order.api.RemoteSubOrderService;
 import org.dromara.order.api.RemoteSubOrderService;
 import org.dromara.order.api.domain.vo.RemoteSubOrderVo;
 import org.dromara.order.api.domain.vo.RemoteSubOrderVo;
 import org.dromara.order.domain.SysOrder;
 import org.dromara.order.domain.SysOrder;
@@ -222,4 +223,14 @@ public class RemoteSubOrderServiceImpl implements RemoteSubOrderService {
                 .eq(SysSubOrder::getId, id)
                 .eq(SysSubOrder::getId, id)
         ).getCode();
         ).getCode();
     }
     }
+
+    @Override
+    public long countCompletedThisMonthByFulfiller(Long id) {
+        return baseMapper.selectCount(
+            Wrappers.lambdaQuery(SysSubOrder.class)
+                .eq(SysSubOrder::getFulfiller, id)
+                .eq(SysSubOrder::getStatus, OrderStatusEnum.COMPLETED.getValue())
+                .ge(SysSubOrder::getServiceTime, DateUtils.getFirstDayOfLastMonth())
+        );
+    }
 }
 }

+ 1 - 1
ruoyi-modules/yingpaipay-order/src/main/resources/application.yml

@@ -1,6 +1,6 @@
 # Tomcat
 # Tomcat
 server:
 server:
-  port: 10005
+  port: 6005
 
 
 # Spring
 # Spring
 spring:
 spring:

+ 3 - 13
ruoyi-modules/yingpaipay-service/src/main/java/org/dromara/service/controller/SysServiceController.java

@@ -104,19 +104,9 @@ public class SysServiceController extends BaseController {
         return toAjax(sysServiceService.deleteWithValidByIds(List.of(ids), true));
         return toAjax(sysServiceService.deleteWithValidByIds(List.of(ids), true));
     }
     }
 
 
-    @GetMapping("/listOnStore")
-    public R<List<SysServiceOnStoreVo>> listOnStore() {
-        return R.ok(sysServiceService.listOnStore());
-    }
-
-    @GetMapping("/listOnOrder")
-    public R<List<SysServiceOnOrderVo>> listOnOrder() {
-        return R.ok(sysServiceService.listOnOrder());
-    }
-
-    @GetMapping("/listOnTaskHall")
-    public R<List<SysServiceOnTaskHallVo>> listOnTaskHall() {
-        return R.ok(sysServiceService.listOnTaskHall());
+    @GetMapping("/listAll")
+    public R<List<SysServiceVo>> listOnStore() {
+        return R.ok(sysServiceService.listAll());
     }
     }
 
 
 }
 }

+ 9 - 8
ruoyi-modules/yingpaipay-service/src/main/java/org/dromara/service/dubbo/RemoteSysServiceServiceImpl.java

@@ -7,7 +7,9 @@ import org.dromara.common.core.constant.CacheNames;
 import org.dromara.service.api.RemoteSysServiceService;
 import org.dromara.service.api.RemoteSysServiceService;
 import org.dromara.service.api.domain.vo.RemoteSysServiceVo;
 import org.dromara.service.api.domain.vo.RemoteSysServiceVo;
 import org.dromara.service.domain.SysService;
 import org.dromara.service.domain.SysService;
+import org.dromara.service.domain.vo.SysServiceVo;
 import org.dromara.service.mapper.SysServiceMapper;
 import org.dromara.service.mapper.SysServiceMapper;
+import org.dromara.service.service.ISysServiceService;
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
@@ -27,13 +29,12 @@ import java.util.stream.Collectors;
 @DubboService
 @DubboService
 public class RemoteSysServiceServiceImpl implements RemoteSysServiceService {
 public class RemoteSysServiceServiceImpl implements RemoteSysServiceService {
 
 
-    private final SysServiceMapper baseMapper;
+    private final ISysServiceService serviceService;
 
 
     @Override
     @Override
     public List<RemoteSysServiceVo> listAll() {
     public List<RemoteSysServiceVo> listAll() {
-        List<SysService> list = baseMapper.selectList(
-            Wrappers.lambdaQuery(SysService.class).orderByAsc(SysService::getSort)
-        );
+
+        List<SysServiceVo> list = serviceService.listAll();
         return list.stream().map(e -> {
         return list.stream().map(e -> {
             RemoteSysServiceVo vo = new RemoteSysServiceVo();
             RemoteSysServiceVo vo = new RemoteSysServiceVo();
             vo.setId(e.getId());
             vo.setId(e.getId());
@@ -47,11 +48,11 @@ public class RemoteSysServiceServiceImpl implements RemoteSysServiceService {
         if (ids == null || ids.isEmpty()) {
         if (ids == null || ids.isEmpty()) {
             return Collections.emptyList();
             return Collections.emptyList();
         }
         }
-        List<SysService> list = baseMapper.selectList(
-            Wrappers.lambdaQuery(SysService.class).in(SysService::getId, ids)
-        );
+
+        List<SysServiceVo> list = serviceService.listAll().stream().filter(e -> ids.contains(e.getId())).toList();
+
         Map<Long, String> nameMap = list.stream()
         Map<Long, String> nameMap = list.stream()
-            .collect(Collectors.toMap(SysService::getId, SysService::getName));
+            .collect(Collectors.toMap(SysServiceVo::getId, SysServiceVo::getName));
         List<String> names = new ArrayList<>();
         List<String> names = new ArrayList<>();
         for (Long id : ids) {
         for (Long id : ids) {
             String name = nameMap.get(id);
             String name = nameMap.get(id);

+ 1 - 4
ruoyi-modules/yingpaipay-service/src/main/java/org/dromara/service/service/ISysServiceService.java

@@ -70,9 +70,6 @@ public interface ISysServiceService {
      */
      */
     Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
     Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
 
 
-    List<SysServiceOnStoreVo> listOnStore();
+    List<SysServiceVo> listAll();
 
 
-    List<SysServiceOnOrderVo> listOnOrder();
-
-    List<SysServiceOnTaskHallVo> listOnTaskHall();
 }
 }

+ 9 - 46
ruoyi-modules/yingpaipay-service/src/main/java/org/dromara/service/service/impl/SysServiceServiceImpl.java

@@ -12,11 +12,13 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.RequiredArgsConstructor;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.dromara.common.redis.utils.CacheUtils;
 import org.dromara.common.redis.utils.CacheUtils;
+import org.dromara.common.translation.constant.TransConstant;
 import org.dromara.resource.api.RemoteFileService;
 import org.dromara.resource.api.RemoteFileService;
 import org.dromara.resource.api.domain.RemoteFile;
 import org.dromara.resource.api.domain.RemoteFile;
 import org.dromara.service.domain.vo.SysServiceOnOrderVo;
 import org.dromara.service.domain.vo.SysServiceOnOrderVo;
 import org.dromara.service.domain.vo.SysServiceOnStoreVo;
 import org.dromara.service.domain.vo.SysServiceOnStoreVo;
 import org.dromara.service.domain.vo.SysServiceOnTaskHallVo;
 import org.dromara.service.domain.vo.SysServiceOnTaskHallVo;
+import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.cache.annotation.CachePut;
 import org.springframework.cache.annotation.CachePut;
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
@@ -50,7 +52,7 @@ public class SysServiceServiceImpl implements ISysServiceService {
      * @param id 主键
      * @param id 主键
      * @return 服务列表
      * @return 服务列表
      */
      */
-    @Cacheable(cacheNames = CacheNames.SYS_SERVICE, key = "#id")
+    @Cacheable(cacheNames = CacheNames.SYS_SERVICE)
     @Override
     @Override
     public SysServiceVo queryById(Long id){
     public SysServiceVo queryById(Long id){
         return baseMapper.selectVoById(id);
         return baseMapper.selectVoById(id);
@@ -95,7 +97,7 @@ public class SysServiceServiceImpl implements ISysServiceService {
      * @param bo 服务列表
      * @param bo 服务列表
      * @return 是否新增成功
      * @return 是否新增成功
      */
      */
-    @CachePut(cacheNames = CacheNames.SYS_SERVICE, key = "#bo.id")
+    @CacheEvict(cacheNames = CacheNames.SYS_SERVICE)
     @Override
     @Override
     public SysServiceVo insertByBo(SysServiceBo bo) {
     public SysServiceVo insertByBo(SysServiceBo bo) {
         SysService add = MapstructUtils.convert(bo, SysService.class);
         SysService add = MapstructUtils.convert(bo, SysService.class);
@@ -113,7 +115,7 @@ public class SysServiceServiceImpl implements ISysServiceService {
      * @param bo 服务列表
      * @param bo 服务列表
      * @return 是否修改成功
      * @return 是否修改成功
      */
      */
-    @CachePut(cacheNames = CacheNames.SYS_SERVICE, key = "#bo.id")
+    @CacheEvict(cacheNames = CacheNames.SYS_SERVICE)
     @Override
     @Override
     public SysServiceVo updateByBo(SysServiceBo bo) {
     public SysServiceVo updateByBo(SysServiceBo bo) {
         SysService update = MapstructUtils.convert(bo, SysService.class);
         SysService update = MapstructUtils.convert(bo, SysService.class);
@@ -137,58 +139,19 @@ public class SysServiceServiceImpl implements ISysServiceService {
      * @param isValid 是否进行有效性校验
      * @param isValid 是否进行有效性校验
      * @return 是否删除成功
      * @return 是否删除成功
      */
      */
+    @CacheEvict(cacheNames = CacheNames.SYS_SERVICE)
     @Override
     @Override
     public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
     public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
         if(isValid){
         if(isValid){
             //TODO 做一些业务上的校验,判断是否需要校验
             //TODO 做一些业务上的校验,判断是否需要校验
         }
         }
-        ids.forEach(id -> CacheUtils.evict(CacheNames.SYS_SERVICE, id));
         return baseMapper.deleteByIds(ids) > 0;
         return baseMapper.deleteByIds(ids) > 0;
     }
     }
 
 
+    @Cacheable(cacheNames = CacheNames.SYS_SERVICE)
     @Override
     @Override
-    public List<SysServiceOnStoreVo> listOnStore() {
-        return baseMapper.selectList().stream().map(e -> {
-            SysServiceOnStoreVo vo = new SysServiceOnStoreVo();
-            vo.setId(e.getId());
-            vo.setName(e.getName());
-            return vo;
-        }).toList();
+    public List<SysServiceVo> listAll() {
+        return baseMapper.selectVoList();
     }
     }
 
 
-    @Override
-    public List<SysServiceOnOrderVo> listOnOrder() {
-        return baseMapper.selectList().stream().map(e -> {
-            SysServiceOnOrderVo vo = new SysServiceOnOrderVo();
-            vo.setId(e.getId());
-            vo.setName(e.getName());
-            vo.setRemark(e.getRemark());
-            vo.setMode(e.getMode());
-            vo.setIcon(e.getIcon());
-            return vo;
-        }).toList();
-    }
-
-    @Override
-    public List<SysServiceOnTaskHallVo> listOnTaskHall() {
-        List<SysService> services = baseMapper.selectList();
-
-        List<Long> iconIds = new ArrayList<>();
-        Map<Long, RemoteFile> iconMap = new HashMap<>();
-        services.forEach(e -> iconIds.add(e.getIcon()));
-        remoteFileService.selectByIds(iconIds).forEach(e -> iconMap.put(e.getOssId(), e));
-
-        List<SysServiceOnTaskHallVo> vos = new ArrayList<>();
-        for (SysService service : services) {
-            SysServiceOnTaskHallVo vo = new SysServiceOnTaskHallVo();
-            vo.setId(service.getId());
-            vo.setName(service.getName());
-            vo.setMode(service.getMode());
-            vo.setIcon(service.getIcon());
-            vo.setIconUrl(iconMap.get(service.getIcon()).getUrl());
-            vos.add(vo);
-        }
-
-        return vos;
-    }
 }
 }

+ 1 - 1
ruoyi-modules/yingpaipay-service/src/main/resources/application.yml

@@ -1,6 +1,6 @@
 # Tomcat
 # Tomcat
 server:
 server:
-  port: 10006
+  port: 6006
 
 
 # Spring
 # Spring
 spring:
 spring:

+ 7 - 0
script/sql/business/create.sql

@@ -328,3 +328,10 @@ CREATE TABLE `pet_system`.`flf_level_config_rights`
     `rights_id`    bigint    NOT NULL COMMENT '权益ID',
     `rights_id`    bigint    NOT NULL COMMENT '权益ID',
     PRIMARY KEY (`config_id`, `rights_id`)
     PRIMARY KEY (`config_id`, `rights_id`)
 ) ENGINE = innoDB COMMENT = '等级配置权益关联表';
 ) ENGINE = innoDB COMMENT = '等级配置权益关联表';
+
+CREATE TABLE `pet_system`.`sys_user_area_station`
+(
+    `sys_user_id` bigint     NOT NULL COMMENT '系统用户ID',
+    `area_station_id` bigint  NOT NULL COMMENT '区域站点ID',
+    PRIMARY KEY (`sys_user_id`, `area_station_id`)
+) ENGINE = innoDB COMMENT = '等级配置权益关联表';