Răsfoiți Sursa

异常上报基本完成

Huanyi 1 lună în urmă
părinte
comite
3da45e9df6
31 a modificat fișierele cu 480 adăugiri și 59 ștergeri
  1. 2 0
      ruoyi-api/yingpaipay-api-archieves/src/main/java/org/dromara/api/domain/vo/RemoteCustomerVo.java
  2. 7 0
      ruoyi-api/yingpaipay-api-order/pom.xml
  3. 9 1
      ruoyi-api/yingpaipay-api-order/src/main/java/org/dromara/order/api/RemoteSubOrderService.java
  4. 25 0
      ruoyi-api/yingpaipay-api-order/src/main/java/org/dromara/order/api/domain/vo/RemoteSubOrderVo.java
  5. 38 0
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/FlfAnamalyOnOrderVo.java
  6. 2 0
      ruoyi-modules/yingpaipay-archieves/src/main/java/org/dromara/archieves/domain/UsrCustomer.java
  7. 2 0
      ruoyi-modules/yingpaipay-archieves/src/main/java/org/dromara/archieves/domain/UsrPet.java
  8. 2 1
      ruoyi-modules/yingpaipay-archieves/src/main/java/org/dromara/archieves/dubbo/RemoteCustomerServiceImpl.java
  9. 2 0
      ruoyi-modules/yingpaipay-archieves/src/main/java/org/dromara/archieves/service/impl/UsrCustomerServiceImpl.java
  10. 2 0
      ruoyi-modules/yingpaipay-archieves/src/main/java/org/dromara/archieves/service/impl/UsrPetServiceImpl.java
  11. 11 0
      ruoyi-modules/yingpaipay-fulfiller/pom.xml
  12. 23 0
      ruoyi-modules/yingpaipay-fulfiller/src/main/java/org/dromara/fulfiller/constants/TagTargetConstants.java
  13. 20 3
      ruoyi-modules/yingpaipay-fulfiller/src/main/java/org/dromara/fulfiller/controller/FlfAnamalyController.java
  14. 6 0
      ruoyi-modules/yingpaipay-fulfiller/src/main/java/org/dromara/fulfiller/domain/FlfAnamaly.java
  15. 14 0
      ruoyi-modules/yingpaipay-fulfiller/src/main/java/org/dromara/fulfiller/domain/bo/FlfAnamalyAuditBo.java
  16. 18 0
      ruoyi-modules/yingpaipay-fulfiller/src/main/java/org/dromara/fulfiller/domain/bo/FlfAnamalyUploadBo.java
  17. 9 0
      ruoyi-modules/yingpaipay-fulfiller/src/main/java/org/dromara/fulfiller/domain/vo/FlfAnamalyVo.java
  18. 10 3
      ruoyi-modules/yingpaipay-fulfiller/src/main/java/org/dromara/fulfiller/service/IFlfAnamalyService.java
  19. 137 13
      ruoyi-modules/yingpaipay-fulfiller/src/main/java/org/dromara/fulfiller/service/impl/FlfAnamalyServiceImpl.java
  20. 23 17
      ruoyi-modules/yingpaipay-fulfiller/src/main/java/org/dromara/fulfiller/service/impl/FlfFulfillerServiceImpl.java
  21. 0 1
      ruoyi-modules/yingpaipay-order/src/main/java/org/dromara/order/domain/bo/SysOrderCreateBo.java
  22. 4 0
      ruoyi-modules/yingpaipay-order/src/main/java/org/dromara/order/domain/bo/SysSubOrderClockInBo.java
  23. 1 1
      ruoyi-modules/yingpaipay-order/src/main/java/org/dromara/order/domain/vo/SysSubOrderLogVo.java
  24. 3 2
      ruoyi-modules/yingpaipay-order/src/main/java/org/dromara/order/domain/vo/SysSubOrderVo.java
  25. 69 3
      ruoyi-modules/yingpaipay-order/src/main/java/org/dromara/order/dubbo/RemoteSubOrderServiceImpl.java
  26. 1 1
      ruoyi-modules/yingpaipay-order/src/main/java/org/dromara/order/enums/OrderLogFulfillerStepEnum.java
  27. 1 1
      ruoyi-modules/yingpaipay-order/src/main/java/org/dromara/order/enums/OrderLogSystemStepEnum.java
  28. 9 2
      ruoyi-modules/yingpaipay-order/src/main/java/org/dromara/order/service/impl/SysSubOrderServiceImpl.java
  29. 1 1
      ruoyi-modules/yingpaipay-service/src/main/java/org/dromara/service/controller/SysServiceController.java
  30. 4 0
      ruoyi-modules/yingpaipay-service/src/main/java/org/dromara/service/domain/vo/SysServiceOnTaskHallVo.java
  31. 25 9
      ruoyi-modules/yingpaipay-service/src/main/java/org/dromara/service/service/impl/SysServiceServiceImpl.java

+ 2 - 0
ruoyi-api/yingpaipay-api-archieves/src/main/java/org/dromara/api/domain/vo/RemoteCustomerVo.java

@@ -17,4 +17,6 @@ public class RemoteCustomerVo implements Serializable {
 
     private String address;
 
+    private String phone;
+
 }

+ 7 - 0
ruoyi-api/yingpaipay-api-order/pom.xml

@@ -11,4 +11,11 @@
 
     <artifactId>yingpaipay-api-order</artifactId>
 
+    <dependencies>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+        </dependency>
+    </dependencies>
+
 </project>

+ 9 - 1
ruoyi-api/yingpaipay-api-order/src/main/java/org/dromara/order/api/RemoteSubOrderService.java

@@ -1,9 +1,17 @@
 package org.dromara.order.api;
 
+import org.dromara.order.api.domain.vo.RemoteSubOrderVo;
+
 import java.util.List;
 
 public interface RemoteSubOrderService {
     List<Long> getIdsByCode(String code);
 
-    Long getIdByCode(String code);
+    RemoteSubOrderVo getIdByCode(String code);
+
+    List<RemoteSubOrderVo> getByIds(List<Long> orderIds);
+
+    List<RemoteSubOrderVo> selectByFulfillerIds(List<Long> fulfillerIds);
+
+    RemoteSubOrderVo getById(Long orderId);
 }

+ 25 - 0
ruoyi-api/yingpaipay-api-order/src/main/java/org/dromara/order/api/domain/vo/RemoteSubOrderVo.java

@@ -0,0 +1,25 @@
+package org.dromara.order.api.domain.vo;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class RemoteSubOrderVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    private Long id;
+
+    private String tenantId;
+
+    private String code;
+
+    private Long fulfiller;
+
+    private Date serviceTime;
+
+}

+ 38 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/FlfAnamalyOnOrderVo.java

@@ -0,0 +1,38 @@
+package org.dromara.system.domain.vo;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+@Data
+public class FlfAnamalyOnOrderVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    private Long id;
+
+    private String type;
+
+    private String content;
+
+    private List<String> photos;
+
+    private Long fulfiller;
+
+    private String fulfillerName;
+
+    private Integer status;
+
+    private Long auditor;
+
+    private String auditorName;
+
+    private String auditRemark;
+
+    private Date auditTime;
+
+}

+ 2 - 0
ruoyi-modules/yingpaipay-archieves/src/main/java/org/dromara/archieves/domain/UsrCustomer.java

@@ -146,4 +146,6 @@ public class UsrCustomer extends TenantEntity {
     @TableLogic
     private String delFlag;
 
+    private Integer platformId;
+
 }

+ 2 - 0
ruoyi-modules/yingpaipay-archieves/src/main/java/org/dromara/archieves/domain/UsrPet.java

@@ -82,4 +82,6 @@ public class UsrPet extends TenantEntity {
     @TableLogic
     private String delFlag;
 
+    private Integer platformId;
+
 }

+ 2 - 1
ruoyi-modules/yingpaipay-archieves/src/main/java/org/dromara/archieves/dubbo/RemoteCustomerServiceImpl.java

@@ -52,13 +52,14 @@ public class RemoteCustomerServiceImpl implements RemoteCustomerService {
         List<RemoteCustomerVo> vos = new ArrayList<>();
         baseMapper.selectList(
             Wrappers.lambdaQuery(UsrCustomer.class)
-                .select(UsrCustomer::getId, UsrCustomer::getName, UsrCustomer::getAddress)
+                .select(UsrCustomer::getId, UsrCustomer::getName, UsrCustomer::getAddress, UsrCustomer::getPhone)
                 .in(UsrCustomer::getId, customerIds)
         ).forEach(e -> {
             RemoteCustomerVo vo = new RemoteCustomerVo();
             vo.setId(e.getId());
             vo.setName(e.getName());
             vo.setAddress(e.getAddress());
+            vo.setPhone(e.getPhone());
             vos.add(vo);
         });
         return vos;

+ 2 - 0
ruoyi-modules/yingpaipay-archieves/src/main/java/org/dromara/archieves/service/impl/UsrCustomerServiceImpl.java

@@ -11,6 +11,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.dromara.common.platform.PlatformUtils;
 import org.dromara.common.redis.utils.CacheUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -90,6 +91,7 @@ public class UsrCustomerServiceImpl implements IUsrCustomerService {
     @Transactional(rollbackFor = Exception.class)
     public Boolean insertByBo(UsrCustomerBo bo) {
         UsrCustomer add = MapstructUtils.convert(bo, UsrCustomer.class);
+        add.setPlatformId(PlatformUtils.getId());
         validEntityBeforeSave(add);
         boolean flag = baseMapper.insert(add) > 0;
         if (flag) {

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

@@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.dromara.common.platform.PlatformUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.dromara.archieves.domain.SysTag;
@@ -108,6 +109,7 @@ public class UsrPetServiceImpl implements IUsrPetService {
     @Transactional(rollbackFor = Exception.class)
     public Boolean insertByBo(UsrPetBo bo) {
         UsrPet add = MapstructUtils.convert(bo, UsrPet.class);
+        add.setPlatformId(PlatformUtils.getId());
         validEntityBeforeSave(add);
         boolean flag = baseMapper.insert(add) > 0;
         if (flag) {

+ 11 - 0
ruoyi-modules/yingpaipay-fulfiller/pom.xml

@@ -100,6 +100,11 @@
             <artifactId>yingpaipay-api-fulfiller</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>org.dromara</groupId>
+            <artifactId>yingpaipay-api-order</artifactId>
+        </dependency>
+
         <!-- RuoYi Api System -->
         <dependency>
             <groupId>org.dromara</groupId>
@@ -123,6 +128,12 @@
             <version>1.80</version>
             <scope>compile</scope>
         </dependency>
+        <dependency>
+            <groupId>org.dromara</groupId>
+            <artifactId>ruoyi-system</artifactId>
+            <version>2.5.3</version>
+            <scope>compile</scope>
+        </dependency>
 
     </dependencies>
 

+ 23 - 0
ruoyi-modules/yingpaipay-fulfiller/src/main/java/org/dromara/fulfiller/constants/TagTargetConstants.java

@@ -0,0 +1,23 @@
+package org.dromara.fulfiller.constants;
+
+public interface TagTargetConstants {
+
+    /**
+     * 履约者
+     * @Author: Huanyi
+     */
+    String FULFILLER = "fulfiller";
+
+    /**
+     * 宠物
+     * @Author: Huanyi
+     */
+    String PET = "pet";
+
+    /**
+     * 宠物用户
+     * @Author: Huanyi
+     */
+    String CUSTOMER = "customer";
+
+}

+ 20 - 3
ruoyi-modules/yingpaipay-fulfiller/src/main/java/org/dromara/fulfiller/controller/FlfAnamalyController.java

@@ -6,14 +6,15 @@ import org.dromara.common.core.validate.AddGroup;
 import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
 import org.dromara.common.web.core.BaseController;
-import org.dromara.fulfiller.domain.bo.FlfAnamalyAddBo;
-import org.dromara.fulfiller.domain.bo.FlfAnamalyBo;
-import org.dromara.fulfiller.domain.bo.FlfAnamalyPageBo;
+import org.dromara.fulfiller.domain.bo.*;
 import org.dromara.fulfiller.domain.vo.FlfAnamalyVo;
 import org.dromara.fulfiller.service.IFlfAnamalyService;
+import org.dromara.system.domain.vo.FlfAnamalyOnOrderVo;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.List;
+
 @RestController
 @RequestMapping("/anamaly")
 @RequiredArgsConstructor
@@ -32,4 +33,20 @@ public class FlfAnamalyController extends BaseController {
         return toAjax(flfAnamalyService.insertByBo(bo));
     }
 
+    @PutMapping("/audit")
+    public R<Void> audit(@RequestBody FlfAnamalyAuditBo bo) {
+        return toAjax(flfAnamalyService.audit(bo));
+    }
+
+
+    @PostMapping("/upload")
+    public R<Void> upload(@RequestBody FlfAnamalyUploadBo bo) {
+        return toAjax(flfAnamalyService.upload(bo));
+    }
+
+    @GetMapping("/listOnOrder")
+    public R<List<FlfAnamalyOnOrderVo>> listOnOrder(@RequestParam Long orderId) {
+        return R.ok(flfAnamalyService.getByOrderId(orderId));
+    }
+
 }

+ 6 - 0
ruoyi-modules/yingpaipay-fulfiller/src/main/java/org/dromara/fulfiller/domain/FlfAnamaly.java

@@ -8,6 +8,7 @@ import org.dromara.common.translation.annotation.Translation;
 import org.dromara.common.translation.constant.TransConstant;
 
 import java.io.Serial;
+import java.util.Date;
 
 /**
  * 异常信息对象 flf_anamaly
@@ -65,5 +66,10 @@ public class FlfAnamaly extends TenantEntity {
     @TableLogic
     private String delFlag;
 
+    private String auditRemark;
+
+    private Date auditTime;
+
+    private Long auditor;
 
 }

+ 14 - 0
ruoyi-modules/yingpaipay-fulfiller/src/main/java/org/dromara/fulfiller/domain/bo/FlfAnamalyAuditBo.java

@@ -0,0 +1,14 @@
+package org.dromara.fulfiller.domain.bo;
+
+import lombok.Data;
+
+@Data
+public class FlfAnamalyAuditBo {
+
+    private Long id;
+
+    private Integer result;
+
+    private String remark;
+
+}

+ 18 - 0
ruoyi-modules/yingpaipay-fulfiller/src/main/java/org/dromara/fulfiller/domain/bo/FlfAnamalyUploadBo.java

@@ -0,0 +1,18 @@
+package org.dromara.fulfiller.domain.bo;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class FlfAnamalyUploadBo {
+
+    private Long orderId;
+
+    private List<Long> photos;
+
+    private String type;
+
+    private String content;
+
+}

+ 9 - 0
ruoyi-modules/yingpaipay-fulfiller/src/main/java/org/dromara/fulfiller/domain/vo/FlfAnamalyVo.java

@@ -40,12 +40,15 @@ public class FlfAnamalyVo implements Serializable {
      * 履约者
      */
     @ExcelProperty(value = "履约者")
+    private String fulfillerName;
+    private String fulfillerPhone;
     private Long fulfiller;
 
     /**
      * 关联订单
      */
     @ExcelProperty(value = "关联订单")
+    private String orderCode;
     private Long orderId;
 
     /**
@@ -84,5 +87,11 @@ public class FlfAnamalyVo implements Serializable {
     @ExcelProperty(value = "创建时间")
     private Date createTime;
 
+    private String auditRemark;
+
+    private Date auditTime;
+
+    private Long auditor;
+    private String auditorName;
 
 }

+ 10 - 3
ruoyi-modules/yingpaipay-fulfiller/src/main/java/org/dromara/fulfiller/service/IFlfAnamalyService.java

@@ -2,13 +2,20 @@ package org.dromara.fulfiller.service;
 
 import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
-import org.dromara.fulfiller.domain.bo.FlfAnamalyAddBo;
-import org.dromara.fulfiller.domain.bo.FlfAnamalyBo;
-import org.dromara.fulfiller.domain.bo.FlfAnamalyPageBo;
+import org.dromara.fulfiller.domain.bo.*;
 import org.dromara.fulfiller.domain.vo.FlfAnamalyVo;
+import org.dromara.system.domain.vo.FlfAnamalyOnOrderVo;
+
+import java.util.List;
 
 public interface IFlfAnamalyService {
     TableDataInfo<FlfAnamalyVo> list(FlfAnamalyPageBo bo, PageQuery pageQuery);
 
     boolean insertByBo(FlfAnamalyAddBo bo);
+
+    boolean audit(FlfAnamalyAuditBo bo);
+
+    boolean upload(FlfAnamalyUploadBo bo);
+
+    List<FlfAnamalyOnOrderVo> getByOrderId(Long orderId);
 }

+ 137 - 13
ruoyi-modules/yingpaipay-fulfiller/src/main/java/org/dromara/fulfiller/service/impl/FlfAnamalyServiceImpl.java

@@ -11,24 +11,25 @@ import org.dromara.common.core.utils.StringUtils;
 import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
 import org.dromara.common.mybatis.utils.WrapperUtils;
+import org.dromara.common.satoken.utils.LoginHelper;
 import org.dromara.fulfiller.domain.FlfAnamaly;
 import org.dromara.fulfiller.domain.FlfFulfiller;
-import org.dromara.fulfiller.domain.bo.FlfAnamalyAddBo;
-import org.dromara.fulfiller.domain.bo.FlfAnamalyBo;
-import org.dromara.fulfiller.domain.bo.FlfAnamalyPageBo;
+import org.dromara.fulfiller.domain.bo.*;
 import org.dromara.fulfiller.domain.vo.FlfAnamalyVo;
 import org.dromara.fulfiller.mapper.FlfAnamalyMapper;
 import org.dromara.fulfiller.mapper.FlfFulfillerMapper;
 import org.dromara.fulfiller.service.IFlfAnamalyService;
 import org.dromara.order.api.RemoteSubOrderService;
+import org.dromara.order.api.domain.vo.RemoteSubOrderVo;
 import org.dromara.resource.api.RemoteFileService;
 import org.dromara.resource.api.domain.RemoteFile;
+import org.dromara.system.api.RemoteUserService;
+import org.dromara.system.api.domain.vo.RemoteUserVo;
+import org.dromara.system.domain.vo.FlfAnamalyOnOrderVo;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+import java.util.stream.Collectors;
 
 @Service
 @RequiredArgsConstructor
@@ -41,6 +42,8 @@ public class FlfAnamalyServiceImpl implements IFlfAnamalyService {
     private final RemoteSubOrderService remoteSubOrderService;
     @DubboReference
     private final RemoteFileService remoteFileService;
+    @DubboReference
+    private final RemoteUserService remoteUserService;
 
     @Override
     public TableDataInfo<FlfAnamalyVo> list(FlfAnamalyPageBo bo, PageQuery pageQuery) {
@@ -54,36 +57,72 @@ public class FlfAnamalyServiceImpl implements IFlfAnamalyService {
             List<Long> fulfillerIds = new ArrayList<>();
             flfFulfillerMapper.selectList(Wrappers.lambdaQuery(FlfFulfiller.class).select(FlfFulfiller::getId).like(FlfFulfiller::getName, content))
                 .forEach(e -> fulfillerIds.add(e.getId()));
-            wrapper.in(FlfAnamaly::getId, WrapperUtils.convertIds(fulfillerIds));
             List<Long> orderIds = remoteSubOrderService.getIdsByCode(content);
-            wrapper.in(FlfAnamaly::getOrderId, WrapperUtils.convertIds(orderIds));
+            wrapper.and(w -> w
+                .in(FlfAnamaly::getFulfiller, WrapperUtils.convertIds(fulfillerIds))
+                .or()
+                .in(FlfAnamaly::getOrderId, WrapperUtils.convertIds(orderIds))
+            );
         }
 
         Page<FlfAnamalyVo> page = baseMapper.selectVoPage(pageQuery.build(), wrapper);
 
         List<Long> photoIds = new ArrayList<>();
+        List<Long> fulfillerIds = new ArrayList<>();
+        List<Long> orderIds = new ArrayList<>();
+        List<Long> auditorIds = new ArrayList<>();
         Map<Long, RemoteFile> photoMap = new HashMap<>();
+        Map<Long, FlfFulfiller> fulfillerMap = new HashMap<>();
+        Map<Long, RemoteSubOrderVo> orderMap = new HashMap<>();
+        Map<Long, RemoteUserVo> auditorMap = new HashMap<>();
         page.getRecords().forEach(e -> {
+            fulfillerIds.add(e.getFulfiller());
             if (StringUtils.isNotBlank(e.getPhotos())) {
                 String[] ids = e.getPhotos().split(",");
                 for (String id : ids) {
                     photoIds.add(Long.valueOf(id));
                 }
             }
+            orderIds.add(e.getOrderId());
+            auditorIds.add(e.getAuditor());
         });
         if (!photoIds.isEmpty()) {
             remoteFileService.selectByIds(photoIds).forEach(e -> photoMap.put(e.getOssId(), e));
         }
+        if (!orderIds.isEmpty()) {
+            remoteSubOrderService.getByIds(orderIds).forEach(e -> orderMap.put(e.getId(), e));
+        }
+        if (!auditorIds.isEmpty()) {
+            remoteUserService.getByIds(auditorIds).forEach(e -> auditorMap.put(e.getUserId(), e));
+        }
+        flfFulfillerMapper.selectList(
+            Wrappers.lambdaQuery(FlfFulfiller.class).select(FlfFulfiller::getId, FlfFulfiller::getName, FlfFulfiller::getPhone)
+                .in(FlfFulfiller::getId, WrapperUtils.convertIds(fulfillerIds))
+            )
+            .forEach(e -> fulfillerMap.put(e.getId(), e));
 
         return TableDataInfo.build(page.convert(e -> {
+            FlfFulfiller fulfiler = fulfillerMap.get(e.getFulfiller());
+            if (fulfiler != null) {
+                e.setFulfillerName(fulfiler.getName());
+                e.setFulfillerPhone(fulfiler.getPhone());
+            }
             if (StringUtils.isNotBlank(e.getPhotos())) {
                 List<String> photoUrls = new ArrayList<>();
                 String[] ids = e.getPhotos().split(",");
                 for (String id : ids) {
-                    photoUrls.add(photoMap.get(id).getUrl());
+                    photoUrls.add(photoMap.get(Long.valueOf(id)).getUrl());
                 }
                 e.setPhotosUrls(photoUrls);
             }
+            RemoteSubOrderVo order = orderMap.get(e.getOrderId());
+            if (order != null) {
+                e.setOrderCode(order.getCode());
+            }
+            RemoteUserVo auditor = auditorMap.get(e.getAuditor());
+            if (auditor != null) {
+                e.setAuditorName(auditor.getUserName());
+            }
             return e;
         }));
     }
@@ -91,19 +130,104 @@ public class FlfAnamalyServiceImpl implements IFlfAnamalyService {
     @Override
     public boolean insertByBo(FlfAnamalyAddBo bo) {
 
-        Long orderId = remoteSubOrderService.getIdByCode(bo.getOrderCode());
-        if (orderId == null) {
+        RemoteSubOrderVo vo = remoteSubOrderService.getIdByCode(bo.getOrderCode());
+        if (vo == null) {
             throw new ServiceException("未能根据订单号 " + bo.getOrderCode() + " 找到订单,请仔细检查");
         }
 
         FlfAnamaly add = new FlfAnamaly();
         add.setFulfiller(bo.getFulfiller());
-        add.setOrderId(orderId);
+        add.setOrderId(vo.getId());
         add.setType(bo.getType());
         add.setContent(bo.getContent());
         add.setPhotos(bo.getPhotos());
         add.setStatus(bo.getStatus());
+        add.setTenantId(vo.getTenantId());
 
         return baseMapper.insert(add) > 0;
     }
+
+    @Override
+    public boolean audit(FlfAnamalyAuditBo bo) {
+        return baseMapper.update(
+            Wrappers.lambdaUpdate(FlfAnamaly.class)
+                .eq(FlfAnamaly::getId, bo.getId())
+                .set(FlfAnamaly::getStatus, bo.getResult())
+                .set(FlfAnamaly::getAuditRemark, bo.getRemark())
+                .set(FlfAnamaly::getAuditTime, new Date())
+                .set(FlfAnamaly::getAuditor, LoginHelper.getUserId())
+        ) > 0;
+    }
+
+    @Override
+    public boolean upload(FlfAnamalyUploadBo bo) {
+
+        FlfAnamaly anamaly = new FlfAnamaly();
+        anamaly.setFulfiller(LoginHelper.getUserId());
+        anamaly.setOrderId(bo.getOrderId());
+        anamaly.setType(bo.getType());
+        anamaly.setContent(bo.getContent());
+        anamaly.setPhotos(bo.getPhotos().stream().map(String::valueOf).collect(Collectors.joining(",")));
+
+        RemoteSubOrderVo vo = remoteSubOrderService.getById(bo.getOrderId());
+        anamaly.setTenantId(vo.getTenantId());
+
+        return baseMapper.insert(anamaly) > 0;
+    }
+
+    @Override
+    public List<FlfAnamalyOnOrderVo> getByOrderId(Long orderId) {
+
+        List<Long> fulfillerIds = new ArrayList<>();
+        List<Long> auditorIds = new ArrayList<>();
+        List<Long> photoIds = new ArrayList<>();
+        Map<Long, FlfFulfiller> fulfillerMap = new HashMap<>();
+        Map<Long, RemoteUserVo> auditorMap = new HashMap<>();
+        Map<Long, RemoteFile> photoMap = new HashMap<>();
+        List<FlfAnamalyOnOrderVo> vos = new ArrayList<>();
+        List<FlfAnamaly> anamalys = baseMapper.selectList(
+            Wrappers.lambdaQuery(FlfAnamaly.class)
+                .eq(FlfAnamaly::getOrderId, orderId)
+                .orderByDesc(FlfAnamaly::getId)
+        );
+        anamalys.forEach(e -> {
+            fulfillerIds.add(e.getFulfiller());
+            auditorIds.add(e.getAuditor());
+            if (StringUtils.isNotEmpty(e.getPhotos())) {
+                photoIds.addAll(Arrays.stream(e.getPhotos().split(",")).map(Long::valueOf).toList());
+            }
+        });
+
+        if (fulfillerIds.isEmpty()) {
+            flfFulfillerMapper.selectByIds(fulfillerIds)
+                .forEach(e -> fulfillerMap.put(e.getId(), e));
+        }
+
+        remoteUserService.selectListByIds(auditorIds).forEach(e -> auditorMap.put(e.getUserId(), e));
+        remoteFileService.selectByIds(photoIds).forEach(e -> photoMap.put(e.getOssId(), e));
+
+        for (FlfAnamaly anamaly : anamalys) {
+            FlfAnamalyOnOrderVo vo = new FlfAnamalyOnOrderVo();
+            vo.setId(anamaly.getId());
+            vo.setType(anamaly.getType());
+            vo.setContent(anamaly.getContent());
+            vo.setPhotos(Arrays.stream(anamaly.getPhotos().split(",")).map(Long::valueOf).map(e -> photoMap.get(e).getUrl()).toList());
+            vo.setFulfiller(anamaly.getFulfiller());
+            FlfFulfiller fulfiller = fulfillerMap.get(anamaly.getFulfiller());
+            if (fulfiller != null) {
+                vo.setFulfillerName(fulfiller.getName());
+            }
+            vo.setStatus(anamaly.getStatus());
+            vo.setAuditor(anamaly.getAuditor());
+            RemoteUserVo auditor = auditorMap.get(anamaly.getAuditor());
+            if (auditor != null) {
+                vo.setAuditorName(auditor.getUserName());
+            }
+            vo.setAuditRemark(anamaly.getAuditRemark());
+            vo.setAuditTime(anamaly.getAuditTime());
+            vos.add(vo);
+        }
+
+        return vos;
+    }
 }

+ 23 - 17
ruoyi-modules/yingpaipay-fulfiller/src/main/java/org/dromara/fulfiller/service/impl/FlfFulfillerServiceImpl.java

@@ -15,8 +15,11 @@ import org.apache.dubbo.config.annotation.DubboReference;
 import org.dromara.common.mybatis.helper.DataBaseHelper;
 import org.dromara.common.mybatis.utils.WrapperUtils;
 import org.dromara.common.satoken.utils.LoginHelper;
+import org.dromara.fulfiller.constants.TagTargetConstants;
 import org.dromara.fulfiller.domain.vo.FlfFulfillerOnOrderVo;
 import org.dromara.fulfiller.domain.vo.FlfFulfilllerListByNameAndPhoneNumberVo;
+import org.dromara.order.api.RemoteSubOrderService;
+import org.dromara.order.api.domain.vo.RemoteSubOrderVo;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.dromara.fulfiller.domain.FlfAudit;
@@ -72,19 +75,19 @@ public class FlfFulfillerServiceImpl implements IFlfFulfillerService {
     private final SysTagRelMapper tagRelMapper;
 
     @DubboReference
-    private RemoteAreaStationService remoteAreaStationService;
-
+    private final RemoteAreaStationService remoteAreaStationService;
     @DubboReference
-    private RemoteSysServiceService remoteSysServiceService;
-
+    private final RemoteSysServiceService remoteSysServiceService;
+    @DubboReference
+    private final RemoteFileService remoteFileService;
     @DubboReference
-    private RemoteFileService remoteFileService;
+    private final RemoteSubOrderService remoteSubOrderService;
 
     @Override
     public FlfFulfillerVo queryById(Long id) {
         FlfFulfillerVo vo = baseMapper.selectVoById(id);
         if (vo != null) {
-            vo.setTags(queryTagsByTargetId(id, "fulfiller"));
+            vo.setTags(queryTagsByTargetId(id, TagTargetConstants.FULFILLER));
             enrichVo(vo);
         }
         return vo;
@@ -95,7 +98,7 @@ public class FlfFulfillerServiceImpl implements IFlfFulfillerService {
         LambdaQueryWrapper<FlfFulfiller> lqw = buildQueryWrapper(bo);
         Page<FlfFulfillerVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
         result.getRecords().forEach(vo -> {
-            vo.setTags(queryTagsByTargetId(vo.getId(), "fulfiller"));
+            vo.setTags(queryTagsByTargetId(vo.getId(), TagTargetConstants.FULFILLER));
             enrichVo(vo);
         });
         return TableDataInfo.build(result);
@@ -105,7 +108,7 @@ public class FlfFulfillerServiceImpl implements IFlfFulfillerService {
     public List<FlfFulfillerVo> queryList(FlfFulfillerBo bo) {
         LambdaQueryWrapper<FlfFulfiller> lqw = buildQueryWrapper(bo);
         List<FlfFulfillerVo> list = baseMapper.selectVoList(lqw);
-        list.forEach(vo -> vo.setTags(queryTagsByTargetId(vo.getId(), "fulfiller")));
+        list.forEach(vo -> vo.setTags(queryTagsByTargetId(vo.getId(), TagTargetConstants.FULFILLER)));
         return list;
     }
 
@@ -143,7 +146,7 @@ public class FlfFulfillerServiceImpl implements IFlfFulfillerService {
         boolean flag = baseMapper.insert(add) > 0;
         if (flag) {
             bo.setId(add.getId());
-            saveTagRels(add.getId(), bo.getTagIds(), "fulfiller");
+            saveTagRels(add.getId(), bo.getTagIds(), TagTargetConstants.FULFILLER);
         }
         return flag;
     }
@@ -155,7 +158,7 @@ public class FlfFulfillerServiceImpl implements IFlfFulfillerService {
         validEntityBeforeSave(update);
         boolean flag = baseMapper.updateById(update) > 0;
         if (flag) {
-            saveTagRels(bo.getId(), bo.getTagIds(), "fulfiller");
+            saveTagRels(bo.getId(), bo.getTagIds(), TagTargetConstants.FULFILLER);
         }
         return flag;
     }
@@ -304,7 +307,7 @@ public class FlfFulfillerServiceImpl implements IFlfFulfillerService {
             Wrappers.lambdaQuery(FlfFulfiller.class).eq(FlfFulfiller::getPhone, phone)
         );
         if (vo != null) {
-            vo.setTags(queryTagsByTargetId(vo.getId(), "fulfiller"));
+            vo.setTags(queryTagsByTargetId(vo.getId(), TagTargetConstants.FULFILLER));
         }
         return vo;
     }
@@ -314,7 +317,7 @@ public class FlfFulfillerServiceImpl implements IFlfFulfillerService {
         // userId 现在是 flf_fulfiller.id @author steelwei
         FlfFulfillerVo vo = baseMapper.selectVoById(userId);
         if (vo != null) {
-            vo.setTags(queryTagsByTargetId(vo.getId(), "fulfiller"));
+            vo.setTags(queryTagsByTargetId(vo.getId(), TagTargetConstants.FULFILLER));
             enrichVo(vo);
         }
         return vo;
@@ -560,7 +563,7 @@ public class FlfFulfillerServiceImpl implements IFlfFulfillerService {
         Page<FlfFulfiller> page = baseMapper.selectPage(
             pageQuery.build(),
             Wrappers.lambdaQuery(FlfFulfiller.class)
-                .select(FlfFulfiller::getId, FlfFulfiller::getAvatar, FlfFulfiller::getPhone, FlfFulfiller::getName, FlfFulfiller::getStatus)
+                .select(FlfFulfiller::getId, FlfFulfiller::getAvatar, FlfFulfiller::getPhone, FlfFulfiller::getName, FlfFulfiller::getStatus, FlfFulfiller::getServiceTypes)
                 .orderByDesc(FlfFulfiller::getId)
                 .and(StringUtils.isNotBlank(content), wrapper -> wrapper
                     .like(FlfFulfiller::getName, content).or().like(FlfFulfiller::getPhone, content)
@@ -579,12 +582,14 @@ public class FlfFulfillerServiceImpl implements IFlfFulfillerService {
         Map<Long, RemoteFile> avatarMap = new HashMap<>();
         tagRelMapper.selectList(
             Wrappers.lambdaQuery(SysTagRel.class)
-                .eq(SysTagRel::getTargetType, "fulfiller")
+                .eq(SysTagRel::getTargetType, TagTargetConstants.FULFILLER)
                 .in(SysTagRel::getTargetId, WrapperUtils.convertIds(fulfillerIds))
         ).forEach(e -> tagMap.computeIfAbsent(e.getTargetId(), k -> new ArrayList<>()).add(e.getTagId()));
 
         remoteFileService.selectByIds(avatarIds).forEach(e -> avatarMap.put(e.getOssId(), e));
 
+        Map<Long, List<RemoteSubOrderVo>> orderMap = remoteSubOrderService.selectByFulfillerIds(fulfillerIds).stream().collect(Collectors.groupingBy(RemoteSubOrderVo::getFulfiller));
+
         return TableDataInfo.build(page.convert(e -> {
             FlfFulfillerOnOrderVo vo = new FlfFulfillerOnOrderVo();
             vo.setId(e.getId());
@@ -598,7 +603,8 @@ public class FlfFulfillerServiceImpl implements IFlfFulfillerService {
             vo.setTags(tagMap.get(e.getId()));
             vo.setStatus(e.getStatus());
             vo.setServiceTypes(e.getServiceTypes());
-            vo.setNextOrderTime(new Date());
+            List<RemoteSubOrderVo> orders = orderMap.get(e.getId());
+            vo.setNextOrderTime(orders != null && !orders.isEmpty() ? orders.get(0).getServiceTime() : null);
             return vo;
         }));
     }
@@ -620,7 +626,7 @@ public class FlfFulfillerServiceImpl implements IFlfFulfillerService {
         Map<Long, RemoteFile> avatarMap = new HashMap<>();
         tagRelMapper.selectList(
             Wrappers.lambdaQuery(SysTagRel.class)
-                .eq(SysTagRel::getTargetType, "fulfiller")
+                .eq(SysTagRel::getTargetType, TagTargetConstants.FULFILLER)
                 .in(SysTagRel::getTargetId, WrapperUtils.convertIds(fulfillerIds))
         ).forEach(e -> tagMap.computeIfAbsent(e.getTargetId(), k -> new ArrayList<>()).add(e.getTagId()));
 
@@ -665,7 +671,7 @@ public class FlfFulfillerServiceImpl implements IFlfFulfillerService {
         Map<Long, RemoteFile> avatarMap = new HashMap<>();
         tagRelMapper.selectList(
             Wrappers.lambdaQuery(SysTagRel.class)
-                .eq(SysTagRel::getTargetType, "fulfiller")
+                .eq(SysTagRel::getTargetType, TagTargetConstants.FULFILLER)
                 .in(SysTagRel::getTargetId, WrapperUtils.convertIds(fulfillerIds))
         ).forEach(e -> tagMap.computeIfAbsent(e.getTargetId(), k -> new ArrayList<>()).add(e.getTagId()));
 

+ 0 - 1
ruoyi-modules/yingpaipay-order/src/main/java/org/dromara/order/domain/bo/SysOrderCreateBo.java

@@ -21,7 +21,6 @@ public class SysOrderCreateBo {
     @NotNull(message = "必须选择一个萌宠")
     private Long pet;
 
-    @NotBlank(message = "请合法输入套餐名")
     private String groupPurchasePackageName;
 
     @NotNull(message = "必须选择一个服务")

+ 4 - 0
ruoyi-modules/yingpaipay-order/src/main/java/org/dromara/order/domain/bo/SysSubOrderClockInBo.java

@@ -17,4 +17,8 @@ public class SysSubOrderClockInBo {
 
     private String content;
 
+    private Boolean startFlag;
+
+    private Boolean finalFlag;
+
 }

+ 1 - 1
ruoyi-modules/yingpaipay-order/src/main/java/org/dromara/order/domain/vo/SysSubOrderLogVo.java

@@ -62,7 +62,7 @@ public class SysSubOrderLogVo implements Serializable {
      * 操作类型
      */
     @ExcelProperty(value = "操作类型")
-    private Integer actionType;
+    private Integer step;
 
     /**
      * 标题

+ 3 - 2
ruoyi-modules/yingpaipay-order/src/main/java/org/dromara/order/domain/vo/SysSubOrderVo.java

@@ -42,7 +42,6 @@ public class SysSubOrderVo implements Serializable {
      * 订单号
      */
     @ExcelProperty(value = "订单号")
-    @Translation(type = TransConstant.ORDER_ID_TO_CODE, mapper = "orderId")
     private String code;
 
     /**
@@ -138,6 +137,8 @@ public class SysSubOrderVo implements Serializable {
 
     private String groupPurchasePackageName;
 
-    private Long pet;
+    private Long usrPet;
+
+    private Long usrCustomer;
 
 }

+ 69 - 3
ruoyi-modules/yingpaipay-order/src/main/java/org/dromara/order/dubbo/RemoteSubOrderServiceImpl.java

@@ -4,11 +4,13 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.RequiredArgsConstructor;
 import org.apache.dubbo.config.annotation.DubboService;
 import org.dromara.order.api.RemoteSubOrderService;
+import org.dromara.order.api.domain.vo.RemoteSubOrderVo;
 import org.dromara.order.domain.SysSubOrder;
 import org.dromara.order.mapper.SysSubOrderMapper;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
 @DubboService
@@ -33,9 +35,10 @@ public class RemoteSubOrderServiceImpl implements RemoteSubOrderService {
     }
 
     @Override
-    public Long getIdByCode(String code) {
+    public RemoteSubOrderVo getIdByCode(String code) {
         SysSubOrder subOrder = baseMapper.selectOne(
-            Wrappers.lambdaQuery(SysSubOrder.class).select(SysSubOrder::getId)
+            Wrappers.lambdaQuery(SysSubOrder.class)
+                .select(SysSubOrder::getId, SysSubOrder::getTenantId)
                 .eq(SysSubOrder::getCode, code)
                 .last("LIMIT 1")
         );
@@ -44,6 +47,69 @@ public class RemoteSubOrderServiceImpl implements RemoteSubOrderService {
             return null;
         }
 
-        return subOrder.getId();
+        RemoteSubOrderVo vo = new RemoteSubOrderVo();
+        vo.setId(subOrder.getId());
+        vo.setTenantId(subOrder.getTenantId());
+
+        return vo;
+    }
+
+    @Override
+    public List<RemoteSubOrderVo> getByIds(List<Long> orderIds) {
+
+        if (orderIds.isEmpty()) {
+            return Collections.emptyList();
+        }
+
+        List<RemoteSubOrderVo> vos = new ArrayList<>();
+
+        baseMapper.selectList(
+                Wrappers.lambdaQuery(SysSubOrder.class)
+                    .select(SysSubOrder::getId, SysSubOrder::getCode)
+                    .in(SysSubOrder::getId, orderIds))
+            .forEach(e -> {
+                RemoteSubOrderVo vo = new RemoteSubOrderVo();
+                vo.setId(e.getId());
+                vo.setCode(e.getCode());
+                vos.add(vo);
+            });
+
+        return vos;
+    }
+
+    @Override
+    public List<RemoteSubOrderVo> selectByFulfillerIds(List<Long> fulfillerIds) {
+
+        if (fulfillerIds.isEmpty()) {
+            return Collections.emptyList();
+        }
+
+        List<RemoteSubOrderVo> vos = new ArrayList<>();
+
+        baseMapper.selectList(
+            Wrappers.lambdaQuery(SysSubOrder.class)
+                .select(SysSubOrder::getFulfiller, SysSubOrder::getServiceTime)
+                .in(SysSubOrder::getFulfiller, fulfillerIds)
+                .orderByAsc(SysSubOrder::getServiceTime)
+        ).forEach(e -> {
+            RemoteSubOrderVo vo = new RemoteSubOrderVo();
+            vo.setFulfiller(e.getFulfiller());
+            vo.setServiceTime(e.getServiceTime());
+            vos.add(vo);
+        });
+
+        return vos;
+    }
+
+    @Override
+    public RemoteSubOrderVo getById(Long orderId) {
+
+        SysSubOrder order = baseMapper.selectById(orderId);
+
+        RemoteSubOrderVo vo = new RemoteSubOrderVo();
+        vo.setId(order.getId());
+        vo.setTenantId(order.getTenantId());
+
+        return vo;
     }
 }

+ 1 - 1
ruoyi-modules/yingpaipay-order/src/main/java/org/dromara/order/enums/OrderLogFulfillerStepEnum.java

@@ -8,7 +8,7 @@ import lombok.Getter;
 @AllArgsConstructor(access = AccessLevel.PRIVATE)
 public enum OrderLogFulfillerStepEnum {
 
-    RECIEVED(0, "已接单", "履约者 {} 已确认接单,准备前往服务地点"),
+    RECIEVED(0, "已接单", "履约者 %s 已确认接单,准备前往服务地点"),
     ;
     private final Integer value;
     private final String title;

+ 1 - 1
ruoyi-modules/yingpaipay-order/src/main/java/org/dromara/order/enums/OrderLogSystemStepEnum.java

@@ -9,7 +9,7 @@ import lombok.Getter;
 public enum OrderLogSystemStepEnum {
 
     CREATE_ORDER(0, "订单创建", "商户提交订单"),
-    DISPATCH(1, "系统派单", "指派给 {}"),
+    DISPATCH(1, "系统派单", "指派给 %s"),
     RECIEVED(2, "接单成功", "履约者已确认接单"),
     ARRIVED(3, "到达服务点", "履约者已打卡"),
     FINISH(4, "订单完成", "履约者已完成"),

+ 9 - 2
ruoyi-modules/yingpaipay-order/src/main/java/org/dromara/order/service/impl/SysSubOrderServiceImpl.java

@@ -333,7 +333,7 @@ public class SysSubOrderServiceImpl implements ISysSubOrderService {
             RemoteCustomerVo customer = customerMap.get(e.getUsrCustomer());
             if (customer != null) {
                 vo.setCustomerName(customer.getName());
-                vo.setCustomerPhone(customer.getAddress());
+                vo.setCustomerPhone(customer.getPhone());
             }
             vo.setFromCode(e.getFromCode());
             vo.setFromAddress(e.getFromAddress());
@@ -408,12 +408,19 @@ public class SysSubOrderServiceImpl implements ISysSubOrderService {
     public boolean clockIn(SysSubOrderClockInBo bo) {
 
         SysSubOrder subOrder = baseMapper.selectById(bo.getOrderId());
-        if (subOrder.getStatus().equals(OrderStatusEnum.PENDING_SERVICE.getValue())) {
+        if (bo.getStartFlag()) {
             subOrder.setStatus(OrderStatusEnum.IN_SERVICE.getValue());
             boolean flag = baseMapper.updateById(subOrder) == 0;
             if (flag) {
                 throw new RuntimeException("修改订单状态失败");
             }
+
+        } else if (bo.getFinalFlag()) {
+            subOrder.setStatus(OrderStatusEnum.COMPLETED.getValue());
+            boolean flag = baseMapper.updateById(subOrder) == 0;
+            if (flag) {
+                throw new RuntimeException("修改订单状态失败");
+            }
         }
 
         SysSubOrderLog log = new SysSubOrderLog();

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

@@ -62,7 +62,7 @@ public class SysServiceController extends BaseController {
      *
      * @param id 主键
      */
-    @SaCheckPermission("service:list:query")
+//    @SaCheckPermission("service:list:query")
     @GetMapping("/{id}")
     public R<SysServiceVo> getInfo(@NotNull(message = "主键不能为空")
                                      @PathVariable("id") Long id) {

+ 4 - 0
ruoyi-modules/yingpaipay-service/src/main/java/org/dromara/service/domain/vo/SysServiceOnTaskHallVo.java

@@ -17,4 +17,8 @@ public class SysServiceOnTaskHallVo implements Serializable {
 
     private Integer mode;
 
+    private Long icon;
+
+    private String iconUrl;
+
 }

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

@@ -1,5 +1,6 @@
 package org.dromara.service.service.impl;
 
+import org.apache.dubbo.config.annotation.DubboReference;
 import org.dromara.common.core.constant.CacheNames;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.core.utils.StringUtils;
@@ -11,6 +12,8 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.dromara.common.redis.utils.CacheUtils;
+import org.dromara.resource.api.RemoteFileService;
+import org.dromara.resource.api.domain.RemoteFile;
 import org.dromara.service.domain.vo.SysServiceOnOrderVo;
 import org.dromara.service.domain.vo.SysServiceOnStoreVo;
 import org.dromara.service.domain.vo.SysServiceOnTaskHallVo;
@@ -23,9 +26,7 @@ import org.dromara.service.domain.SysService;
 import org.dromara.service.mapper.SysServiceMapper;
 import org.dromara.service.service.ISysServiceService;
 
-import java.util.List;
-import java.util.Map;
-import java.util.Collection;
+import java.util.*;
 
 /**
  * 服务列表Service业务层处理
@@ -40,6 +41,9 @@ public class SysServiceServiceImpl implements ISysServiceService {
 
     private final SysServiceMapper baseMapper;
 
+    @DubboReference
+    private final RemoteFileService remoteFileService;
+
     /**
      * 查询服务列表
      *
@@ -165,12 +169,24 @@ public class SysServiceServiceImpl implements ISysServiceService {
 
     @Override
     public List<SysServiceOnTaskHallVo> listOnTaskHall() {
-        return baseMapper.selectList().stream().map(e -> {
+        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(e.getId());
-            vo.setName(e.getName());
-            vo.setMode(e.getMode());
-            return vo;
-        }).toList();
+            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;
     }
 }