Huanyi 1 месяц назад
Родитель
Сommit
5b74af35c4
25 измененных файлов с 371 добавлено и 48 удалено
  1. 2 0
      ruoyi-api/yingpaipay-api-archieves/src/main/java/org/dromara/api/domain/vo/RemotePetVo.java
  2. 6 0
      ruoyi-api/yingpaipay-api-order/src/main/java/org/dromara/order/api/RemoteSubOrderService.java
  3. 2 0
      ruoyi-api/yingpaipay-api-order/src/main/java/org/dromara/order/api/domain/vo/RemoteSubOrderVo.java
  4. 1 3
      ruoyi-api/yingpaipay-api-service/src/main/java/org/dromara/service/api/RemoteStoreServiceService.java
  5. 4 0
      ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/dubbo/RemoteFileServiceImpl.java
  6. 2 2
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysStoreController.java
  7. 6 0
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysTenantController.java
  8. 25 0
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysTenantEditOnMerchantBo.java
  9. 2 0
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysTenantService.java
  10. 31 19
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysStoreServiceImpl.java
  11. 16 0
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTenantServiceImpl.java
  12. 2 0
      ruoyi-modules/yingpaipay-archieves/src/main/java/org/dromara/archieves/domain/bo/UsrCustomerBo.java
  13. 2 0
      ruoyi-modules/yingpaipay-archieves/src/main/java/org/dromara/archieves/domain/bo/UsrPetBo.java
  14. 2 1
      ruoyi-modules/yingpaipay-archieves/src/main/java/org/dromara/archieves/dubbo/RemotePetServiceImpl.java
  15. 17 0
      ruoyi-modules/yingpaipay-archieves/src/main/java/org/dromara/archieves/enums/UsrCustomerTabEnum.java
  16. 17 0
      ruoyi-modules/yingpaipay-archieves/src/main/java/org/dromara/archieves/enums/UsrPetTabEnum.java
  17. 18 0
      ruoyi-modules/yingpaipay-archieves/src/main/java/org/dromara/archieves/service/impl/UsrCustomerServiceImpl.java
  18. 18 0
      ruoyi-modules/yingpaipay-archieves/src/main/java/org/dromara/archieves/service/impl/UsrPetServiceImpl.java
  19. 2 2
      ruoyi-modules/yingpaipay-order/src/main/java/org/dromara/order/domain/vo/SysSubOrderCountVo.java
  20. 3 1
      ruoyi-modules/yingpaipay-order/src/main/java/org/dromara/order/domain/vo/SysSubOrderListOnMyOrderPageVo.java
  21. 4 0
      ruoyi-modules/yingpaipay-order/src/main/java/org/dromara/order/domain/vo/SysSubOrderPendingAcceptPageVo.java
  22. 59 0
      ruoyi-modules/yingpaipay-order/src/main/java/org/dromara/order/dubbo/RemoteSubOrderServiceImpl.java
  23. 1 0
      ruoyi-modules/yingpaipay-order/src/main/java/org/dromara/order/enums/OrderLogSystemStepEnum.java
  24. 101 11
      ruoyi-modules/yingpaipay-order/src/main/java/org/dromara/order/service/impl/SysSubOrderServiceImpl.java
  25. 28 9
      ruoyi-modules/yingpaipay-service/src/main/java/org/dromara/service/dubbo/RemoteStoreServiceServiceImpl.java

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

@@ -17,4 +17,6 @@ public class RemotePetVo implements Serializable {
 
     private String breed;
 
+    private Long avatar;
+
 }

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

@@ -14,4 +14,10 @@ public interface RemoteSubOrderService {
     List<RemoteSubOrderVo> selectByFulfillerIds(List<Long> fulfillerIds);
 
     RemoteSubOrderVo getById(Long orderId);
+
+    List<Long> getCustomerIdsByTenantId(String tenantId);
+
+    List<Long> getPetIdsByTenantId(String tenantId);
+
+    List<RemoteSubOrderVo> getByStoreIds(List<Long> storeIds);
 }

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

@@ -22,4 +22,6 @@ public class RemoteSubOrderVo implements Serializable {
 
     private Date serviceTime;
 
+    private Long store;
+
 }

+ 1 - 3
ruoyi-api/yingpaipay-api-service/src/main/java/org/dromara/service/api/RemoteStoreServiceService.java

@@ -1,12 +1,10 @@
 package org.dromara.service.api;
 
-import org.dromara.service.api.domain.bo.RemoteStoreServiceBo;
-
 import java.util.List;
 import java.util.Map;
 
 public interface RemoteStoreServiceService {
-    boolean insertBatch(List<RemoteStoreServiceBo> list);
+    boolean insertBatch(Long storeId, List<Long> serviceIds, boolean cleanFlag);
 
     Map<Long, List<Long>> getByIds(List<Long> storeIds);
 }

+ 4 - 0
ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/dubbo/RemoteFileServiceImpl.java

@@ -20,6 +20,7 @@ import org.dromara.resource.service.ISysOssService;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.Collections;
 import java.util.List;
 
 /**
@@ -96,6 +97,9 @@ public class RemoteFileServiceImpl implements RemoteFileService {
 
     @Override
     public List<RemoteFile> selectByIds(List<Long> ossIds){
+        if (ossIds == null || ossIds.isEmpty()) {
+            return Collections.emptyList();
+        }
         List<SysOssVo> sysOssVos = sysOssService.listByIds(ossIds);
         return MapstructUtils.convert(sysOssVos, RemoteFile.class);
     }

+ 2 - 2
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysStoreController.java

@@ -75,7 +75,7 @@ public class SysStoreController extends BaseController {
     /**
      * 新增门店管理
      */
-    @SaCheckPermission("system:store:add")
+//    @SaCheckPermission("system:store:add")
     @Log(title = "门店管理", businessType = BusinessType.INSERT)
     @RepeatSubmit()
     @PostMapping()
@@ -86,7 +86,7 @@ public class SysStoreController extends BaseController {
     /**
      * 修改门店管理
      */
-    @SaCheckPermission("system:store:edit")
+//    @SaCheckPermission("system:store:edit")
     @Log(title = "门店管理", businessType = BusinessType.UPDATE)
     @RepeatSubmit()
     @PutMapping()

+ 6 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysTenantController.java

@@ -18,6 +18,7 @@ import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
 import org.dromara.common.tenant.helper.TenantHelper;
 import org.dromara.system.domain.bo.SysTenantBo;
+import org.dromara.system.domain.bo.SysTenantEditOnMerchantBo;
 import org.dromara.system.domain.vo.SysTenantOnStoreVo;
 import org.dromara.system.domain.vo.SysTenantVo;
 import org.dromara.system.service.ISysTenantService;
@@ -220,4 +221,9 @@ public class SysTenantController extends BaseController {
         return R.ok(tenantService.queryByTenantId(TenantHelper.getTenantId()));
     }
 
+    @PutMapping("/editOnMerchant")
+    public R<Void> editOnMerchant(@Validated @RequestBody SysTenantEditOnMerchantBo bo) {
+        return toAjax(tenantService.updateOnMerchant(bo));
+    }
+
 }

+ 25 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysTenantEditOnMerchantBo.java

@@ -0,0 +1,25 @@
+package org.dromara.system.domain.bo;
+
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+@Data
+public class SysTenantEditOnMerchantBo {
+
+    @NotNull(message = "请通过正确途径发出请求")
+    private Long id;
+
+    @NotBlank(message = "联系人不能为空")
+    private String contact;
+
+    @NotBlank(message = "联系电话不能为空")
+    private String phoneNumber;
+
+    @NotBlank(message = "地址不能为空")
+    private String address;
+
+    @NotBlank(message = "简介不能为空")
+    private String remark;
+
+}

+ 2 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysTenantService.java

@@ -1,5 +1,6 @@
 package org.dromara.system.service;
 
+import org.dromara.system.domain.bo.SysTenantEditOnMerchantBo;
 import org.dromara.system.domain.vo.SysTenantOnStoreVo;
 import org.dromara.system.domain.vo.SysTenantVo;
 import org.dromara.system.domain.bo.SysTenantBo;
@@ -93,4 +94,5 @@ public interface ISysTenantService {
 
     TableDataInfo<SysTenantOnStoreVo> listOnStore(PageQuery pageQuery);
 
+    boolean updateOnMerchant(SysTenantEditOnMerchantBo bo);
 }

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

@@ -15,6 +15,8 @@ import lombok.extern.slf4j.Slf4j;
 import org.dromara.common.mybatis.utils.WrapperUtils;
 import org.dromara.common.redis.utils.CacheUtils;
 import org.dromara.common.satoken.utils.LoginHelper;
+import org.dromara.order.api.RemoteSubOrderService;
+import org.dromara.order.api.domain.vo.RemoteSubOrderVo;
 import org.dromara.service.api.RemoteStoreServiceService;
 import org.dromara.service.api.domain.bo.RemoteStoreServiceBo;
 import org.dromara.system.constants.StoreConstants;
@@ -52,7 +54,9 @@ public class SysStoreServiceImpl implements ISysStoreService {
     private final SysUserStoreMapper userStoreMapper;
 
     @DubboReference
-    private final RemoteStoreServiceService storeServiceService;
+    private final RemoteStoreServiceService remoteStoreServiceService;
+    @DubboReference
+    private final RemoteSubOrderService remoteSubOrderService;
 
     /**
      * 查询门店管理
@@ -63,7 +67,7 @@ public class SysStoreServiceImpl implements ISysStoreService {
     @Override
     public SysStoreVo queryById(Long id){
         SysStoreVo vo = baseMapper.selectVoById(id);
-        Map<Long, List<Long>> map = storeServiceService.getByIds(List.of(id));
+        Map<Long, List<Long>> map = remoteStoreServiceService.getByIds(List.of(id));
         vo.setServices(map.get(id));
         vo.setServiceOrder(0L);
         return vo;
@@ -82,11 +86,14 @@ public class SysStoreServiceImpl implements ISysStoreService {
         Page<SysStoreVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
 
         List<Long> storeIds = new ArrayList<>();
+        Map<Long, List<RemoteSubOrderVo>> orderMap = new HashMap<>();
         result.getRecords().forEach(e -> storeIds.add(e.getId()));
-        Map<Long, List<Long>> map = storeServiceService.getByIds(storeIds);
+        Map<Long, List<Long>> map = remoteStoreServiceService.getByIds(storeIds);
+        remoteSubOrderService.getByStoreIds(storeIds)
+            .forEach(e -> orderMap.computeIfAbsent(e.getStore(), k -> new ArrayList<>()).add(e));
         result.getRecords().forEach(e -> {
             e.setServices(map.get(e.getId()));
-            e.setServiceOrder(0L);
+            e.setServiceOrder(orderMap.containsKey(e.getId()) ? (long) orderMap.get(e.getId()).size() : 0L);
         });
         return TableDataInfo.build(result);
     }
@@ -152,23 +159,17 @@ public class SysStoreServiceImpl implements ISysStoreService {
     public Boolean insertByBo(SysStoreBo bo) {
         SysStore add = MapstructUtils.convert(bo, SysStore.class);
         validEntityBeforeSave(add);
-        boolean flag = baseMapper.insert(add) > 0;
+        boolean flag = baseMapper.insert(add) == 0;
         if (flag) {
-            bo.setId(add.getId());
+            throw new RuntimeException("插入失败");
         }
 
-        boolean storeServiceFlag = storeServiceService.insertBatch(
-            bo.getServices().stream().map(e -> {
-                RemoteStoreServiceBo storeService = new RemoteStoreServiceBo();
-                storeService.setStoreId(bo.getId());
-                storeService.setServiceId(e);
-                return storeService;
-            }).toList()
-        );
-        if (!storeServiceFlag) {
-            throw new RuntimeException("批量插入关系失败");
+        if (!bo.getServices().isEmpty()) {
+            boolean storeServiceFlag = remoteStoreServiceService.insertBatch(add.getId(), bo.getServices(), false);
+            if (!storeServiceFlag) {
+                throw new RuntimeException("批量插入关系失败");
+            }
         }
-
         CacheUtils.put(CacheNames.SYS_STORE_NAME, add.getId(), add.getName());
 
         return true;
@@ -180,14 +181,25 @@ public class SysStoreServiceImpl implements ISysStoreService {
      * @param bo 门店管理
      * @return 是否修改成功
      */
+    @GlobalTransactional(rollbackFor = Exception.class)
     @Override
     public Boolean updateByBo(SysStoreBo bo) {
         SysStore update = MapstructUtils.convert(bo, SysStore.class);
         validEntityBeforeSave(update);
 
+        boolean updateFlag = baseMapper.updateById(update) == 0;
+        if (updateFlag) {
+            throw new RuntimeException("修改失败");
+        }
+
+        boolean storeServiceFlag = remoteStoreServiceService.insertBatch(bo.getId(), bo.getServices(), true);
+        if (!storeServiceFlag) {
+            throw new RuntimeException("批量修改关系失败");
+        }
+
         CacheUtils.put(CacheNames.SYS_STORE_NAME, update.getId(), update.getName());
 
-        return baseMapper.updateById(update) > 0;
+        return true;
     }
 
     /**
@@ -280,7 +292,7 @@ public class SysStoreServiceImpl implements ISysStoreService {
 
         List<Long> ids = new ArrayList<>();
         page.getRecords().forEach(e -> ids.add(e.getId()));
-        Map<Long, List<Long>> map = storeServiceService.getByIds(ids);
+        Map<Long, List<Long>> map = remoteStoreServiceService.getByIds(ids);
 
         return TableDataInfo.build(page.convert(e -> {
             SysStoreListOnOrderVo vo = new SysStoreListOnOrderVo();

+ 16 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTenantServiceImpl.java

@@ -30,6 +30,7 @@ import org.dromara.common.tenant.helper.TenantHelper;
 import org.dromara.system.constants.StoreConstants;
 import org.dromara.system.domain.*;
 import org.dromara.system.domain.bo.SysTenantBo;
+import org.dromara.system.domain.bo.SysTenantEditOnMerchantBo;
 import org.dromara.system.domain.vo.SysTenantOnStoreVo;
 import org.dromara.system.domain.vo.SysTenantVo;
 import org.dromara.system.mapper.*;
@@ -611,4 +612,19 @@ public class SysTenantServiceImpl implements ISysTenantService {
         }));
     }
 
+    @Override
+    public boolean updateOnMerchant(SysTenantEditOnMerchantBo bo) {
+
+        SysTenant tenant = baseMapper.selectById(bo.getId());
+
+        CacheUtils.evict(CacheNames.SYS_TENANT, tenant.getTenantId());
+
+        tenant.setContactUserName(bo.getContact());
+        tenant.setContactPhone(bo.getPhoneNumber());
+        tenant.setAddress(bo.getAddress());
+        tenant.setRemark(bo.getRemark());
+
+        return baseMapper.updateById(tenant) > 0;
+    }
+
 }

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

@@ -115,4 +115,6 @@ public class UsrCustomerBo extends BaseEntity {
      */
     private List<Long> tagIds;
 
+    private Integer tab;
+
 }

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

@@ -89,4 +89,6 @@ public class UsrPetBo extends BaseEntity {
      */
     private List<Long> tagIds;
 
+    private Integer tab;
+
 }

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

@@ -29,7 +29,7 @@ public class RemotePetServiceImpl implements RemotePetService {
 
         List<UsrPet> pets = baseMapper.selectList(
             Wrappers.lambdaQuery(UsrPet.class)
-                .select(UsrPet::getId, UsrPet::getName, UsrPet::getBreed)
+                .select(UsrPet::getId, UsrPet::getName, UsrPet::getBreed, UsrPet::getAvatar)
                 .in(UsrPet::getId, WrapperUtils.convertIds(petIds))
         );
 
@@ -38,6 +38,7 @@ public class RemotePetServiceImpl implements RemotePetService {
             vo.setId(pet.getId());
             vo.setName(pet.getName());
             vo.setBreed(pet.getBreed());
+            vo.setAvatar(pet.getAvatar());
             vos.add(vo);
         }
 

+ 17 - 0
ruoyi-modules/yingpaipay-archieves/src/main/java/org/dromara/archieves/enums/UsrCustomerTabEnum.java

@@ -0,0 +1,17 @@
+package org.dromara.archieves.enums;
+
+import lombok.AccessLevel;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor(access = AccessLevel.PRIVATE)
+public enum UsrCustomerTabEnum {
+
+    SELF(0, "本品牌所属用户"),
+    ORDER(1, "订单关联用户"),
+    ;
+    private final Integer value;
+    private final String label;
+
+}

+ 17 - 0
ruoyi-modules/yingpaipay-archieves/src/main/java/org/dromara/archieves/enums/UsrPetTabEnum.java

@@ -0,0 +1,17 @@
+package org.dromara.archieves.enums;
+
+import lombok.AccessLevel;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor(access = AccessLevel.PRIVATE)
+public enum UsrPetTabEnum {
+
+    SELF(0, "本品牌所属宠物"),
+    ORDER(1, "订单关联宠物"),
+    ;
+    private final Integer value;
+    private final String label;
+
+}

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

@@ -1,6 +1,8 @@
 package org.dromara.archieves.service.impl;
 
+import org.apache.dubbo.config.annotation.DubboReference;
 import org.dromara.archieves.domain.vo.UsrCustomerOnOrderVo;
+import org.dromara.archieves.enums.UsrCustomerTabEnum;
 import org.dromara.common.core.constant.CacheNames;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.core.utils.StringUtils;
@@ -11,8 +13,11 @@ 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.mybatis.utils.WrapperUtils;
 import org.dromara.common.platform.PlatformUtils;
 import org.dromara.common.redis.utils.CacheUtils;
+import org.dromara.common.tenant.helper.TenantHelper;
+import org.dromara.order.api.RemoteSubOrderService;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.dromara.archieves.domain.SysTagRel;
@@ -47,6 +52,9 @@ public class UsrCustomerServiceImpl implements IUsrCustomerService {
     private final SysTagMapper tagMapper;
     private final IArcChangeLogService arcChangeLogService;
 
+    @DubboReference
+    private final RemoteSubOrderService remoteSubOrderService;
+
     @Override
     public UsrCustomerVo queryById(Long id) {
         UsrCustomerVo vo = baseMapper.selectVoById(id);
@@ -84,6 +92,16 @@ public class UsrCustomerServiceImpl implements IUsrCustomerService {
         lqw.like(StringUtils.isNotBlank(bo.getRegionCode()), UsrCustomer::getRegionCode, bo.getRegionCode());
         lqw.eq(bo.getStatus() != null, UsrCustomer::getStatus, bo.getStatus());
         lqw.orderByDesc(UsrCustomer::getCreateTime);
+
+        if (bo.getTab() != null) {
+            if (bo.getTab().equals(UsrCustomerTabEnum.SELF.getValue())) {
+                lqw.eq(UsrCustomer::getTenantId, TenantHelper.getTenantId());
+            } else {
+                List<Long> customerIds = remoteSubOrderService.getCustomerIdsByTenantId(TenantHelper.getTenantId());
+                lqw.in(UsrCustomer::getId, WrapperUtils.convertIds(customerIds));
+            }
+        }
+
         return lqw;
     }
 

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

@@ -1,5 +1,7 @@
 package org.dromara.archieves.service.impl;
 
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.dromara.archieves.enums.UsrPetTabEnum;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.core.utils.StringUtils;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
@@ -9,7 +11,10 @@ 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.mybatis.utils.WrapperUtils;
 import org.dromara.common.platform.PlatformUtils;
+import org.dromara.common.tenant.helper.TenantHelper;
+import org.dromara.order.api.RemoteSubOrderService;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.dromara.archieves.domain.SysTag;
@@ -48,6 +53,9 @@ public class UsrPetServiceImpl implements IUsrPetService {
     private final SysTagMapper tagMapper;
     private final IArcChangeLogService arcChangeLogService;
 
+    @DubboReference
+    private final RemoteSubOrderService remoteSubOrderService;
+
     @Override
     public UsrPetVo queryById(Long id) {
         UsrPetVo vo = baseMapper.selectVoById(id);
@@ -102,6 +110,16 @@ public class UsrPetServiceImpl implements IUsrPetService {
         }
         lqw.eq(bo.getUserId() != null, UsrPet::getUserId, bo.getUserId());
         lqw.orderByDesc(UsrPet::getCreateTime);
+
+        if (bo.getTab() != null) {
+            if (bo.getTab().equals(UsrPetTabEnum.SELF.getValue())) {
+                lqw.eq(UsrPet::getTenantId, TenantHelper.getTenantId());
+            } else {
+                List<Long> petIds = remoteSubOrderService.getPetIdsByTenantId(TenantHelper.getTenantId());
+                lqw.in(UsrPet::getId, WrapperUtils.convertIds(petIds));
+            }
+        }
+
         return lqw;
     }
 

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

@@ -15,8 +15,8 @@ public class SysSubOrderCountVo implements Serializable {
 
     private Long reject;
 
-    private Long award;
+    private Long completed;
 
-    private Long punishment;
+    private Long price;
 
 }

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

@@ -24,7 +24,9 @@ public class SysSubOrderListOnMyOrderPageVo implements Serializable {
 
     private String petName;
 
-    private String petAvatar;
+    private Long petAvatar;
+
+    private String petAvatarUrl;
 
     private String breed;
 

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

@@ -24,6 +24,10 @@ public class SysSubOrderPendingAcceptPageVo implements Serializable {
 
     private String petName;
 
+    private Long petAvatar;
+
+    private String petAvatarUrl;
+
     private String breed;
 
     private Long store;

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

@@ -114,4 +114,63 @@ public class RemoteSubOrderServiceImpl implements RemoteSubOrderService {
 
         return vo;
     }
+
+    @Override
+    public List<Long> getCustomerIdsByTenantId(String tenantId) {
+
+        List<Long> customerIds = new ArrayList<>();
+
+        baseMapper.selectList(
+                Wrappers.lambdaQuery(SysSubOrder.class).select(SysSubOrder::getUsrCustomer)
+                    .eq(SysSubOrder::getTenantId, tenantId)
+            )
+            .forEach(e -> {
+                if (!customerIds.contains(e.getUsrCustomer())) {
+                    customerIds.add(e.getUsrCustomer());
+                }
+            });
+
+        return customerIds;
+    }
+
+    @Override
+    public List<Long> getPetIdsByTenantId(String tenantId) {
+        List<Long> petIds = new ArrayList<>();
+
+        baseMapper.selectList(
+                Wrappers.lambdaQuery(SysSubOrder.class).select(SysSubOrder::getUsrPet)
+                    .eq(SysSubOrder::getTenantId, tenantId)
+            )
+            .forEach(e -> {
+                if (!petIds.contains(e.getUsrPet())) {
+                    petIds.add(e.getUsrPet());
+                }
+            });
+
+        return petIds;
+    }
+
+    @Override
+    public List<RemoteSubOrderVo> getByStoreIds(List<Long> storeIds) {
+
+        if (storeIds.isEmpty()) {
+            return Collections.emptyList();
+        }
+
+        List<RemoteSubOrderVo> vos = new ArrayList<>();
+
+        baseMapper.selectList(
+            Wrappers.lambdaQuery(SysSubOrder.class)
+                .select(SysSubOrder::getId, SysSubOrder::getStore)
+                .ne(SysSubOrder::getStatus, OrderStatusEnum.CANCELLED.getValue())
+                .in(SysSubOrder::getStore, storeIds)
+        ).forEach(e -> {
+            RemoteSubOrderVo vo = new RemoteSubOrderVo();
+            vo.setId(e.getId());
+            vo.setStore(e.getStore());
+            vos.add(vo);
+        });
+
+        return vos;
+    }
 }

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

@@ -13,6 +13,7 @@ public enum OrderLogSystemStepEnum {
     RECIEVED(2, "接单成功", "履约者已确认接单"),
     ARRIVED(3, "到达服务点", "履约者已打卡"),
     FINISH(4, "订单完成", "履约者已完成"),
+    CANCEL(5, "订单取消", "订单已取消"),
     ;
     private final Integer step;
     private final String title;

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

@@ -12,6 +12,7 @@ import org.dromara.api.RemotePetService;
 import org.dromara.api.domain.vo.RemoteCustomerVo;
 import org.dromara.api.domain.vo.RemotePetVo;
 import org.dromara.common.core.constant.TenantConstants;
+import org.dromara.common.core.enums.UserType;
 import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
 import org.dromara.common.mybatis.utils.WrapperUtils;
@@ -28,15 +29,19 @@ import org.dromara.order.enums.*;
 import org.dromara.order.mapper.SysSubOrderLogMapper;
 import org.dromara.order.mapper.SysSubOrderMapper;
 import org.dromara.order.service.ISysSubOrderService;
+import org.dromara.resource.api.RemoteFileService;
+import org.dromara.resource.api.domain.RemoteFile;
 import org.dromara.system.api.RemoteStoreService;
 import org.dromara.system.api.RemoteTenantService;
 import org.dromara.system.api.RemoteUserService;
 import org.dromara.system.api.domain.vo.RemoteStoreVo;
 import org.dromara.system.api.domain.vo.RemoteUserVo;
+import org.dromara.system.api.model.LoginUser;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.*;
+import java.util.concurrent.atomic.AtomicLong;
 import java.util.stream.Collectors;
 
 @Service
@@ -58,6 +63,8 @@ public class SysSubOrderServiceImpl implements ISysSubOrderService {
     private final RemoteFulfillerService remoteFulfillerService;
     @DubboReference
     private final RemoteTenantService remoteTenantService;
+    @DubboReference
+    private final RemoteFileService remoteFileService;
 
     @Override
     public TableDataInfo<SysSubOrderListPageVo> list(SysSubOrderListPageBo bo, PageQuery pageQuery) {
@@ -188,13 +195,49 @@ public class SysSubOrderServiceImpl implements ISysSubOrderService {
         return true;
     }
 
+    @Transactional(rollbackFor = Exception.class)
     @Override
     public boolean cancel(SysSubOrderCancelBo bo) {
-        return baseMapper.update(
-            Wrappers.lambdaUpdate(SysSubOrder.class)
-                .eq(SysSubOrder::getId, bo.getOrderId())
-                .set(SysSubOrder::getStatus, OrderStatusEnum.CANCELLED.getValue())
-        ) > 0;
+
+        SysSubOrder subOrder = baseMapper.selectById(bo.getOrderId());
+        subOrder.setStatus(OrderStatusEnum.CANCELLED.getValue());
+
+        boolean orderFlag = baseMapper.updateById(subOrder) == 0;
+        if (orderFlag) {
+            throw new RuntimeException("修改订单状态失败");
+        }
+
+        SysSubOrderLog log = new SysSubOrderLog();
+
+        LoginUser loginUser = LoginHelper.getLoginUser();
+        if (loginUser.getUserType().equals(UserType.FULFILLER_USER.getUserType())) {
+            log.setSubOrderId(subOrder.getId());
+            log.setActioner(LoginHelper.getUserId());
+            log.setActionerType(OrderLogActionerTypeEnum.FULFILLER.getValue());
+            log.setLogType(OrderLogTypeEnum.FULFILLER.getValue());
+            OrderLogFulfillerStepEnum step = OrderLogFulfillerStepEnum.REJECT;
+            log.setStep(step.getStep());
+            log.setTitle(step.getTitle());
+            log.setContent(String.format(step.getContent(), loginUser.getNickname()));
+            log.setTenantId(subOrder.getTenantId());
+        } else {
+            log.setSubOrderId(subOrder.getId());
+            log.setActioner(LoginHelper.getUserId());
+            log.setActionerType(OrderLogActionerTypeEnum.SYS_USER.getValue());
+            log.setLogType(OrderLogTypeEnum.ORDER.getValue());
+            OrderLogSystemStepEnum step = OrderLogSystemStepEnum.CANCEL;
+            log.setStep(step.getStep());
+            log.setTitle(step.getTitle());
+            log.setContent(step.getContent());
+            log.setTenantId(subOrder.getTenantId());
+        }
+
+        boolean logFlag = subOrderLogMapper.insert(log) == 0;
+        if (logFlag) {
+            throw new RuntimeException("日志追加失败");
+        }
+
+        return true;
     }
 
     @Override
@@ -304,14 +347,20 @@ public class SysSubOrderServiceImpl implements ISysSubOrderService {
 
         List<Long> petIds = new ArrayList<>();
         List<Long> customerIds = new ArrayList<>();
+        List<Long> avatarIds = new ArrayList<>();
         Map<Long, RemotePetVo> petMap = new HashMap<>();
         Map<Long, RemoteCustomerVo> customerMap = new HashMap<>();
+        Map<Long, RemoteFile> avatarMap = new HashMap<>();
         page.getRecords().forEach(e -> {
             petIds.add(e.getUsrPet());
             customerIds.add(e.getUsrCustomer());
         });
-        remotePetService.getByIds(petIds).forEach(e -> petMap.put(e.getId(), e));
+        remotePetService.getByIds(petIds).forEach(e -> {
+            petMap.put(e.getId(), e);
+            avatarIds.add(e.getAvatar());
+        });
         remoteCustomerService.getByIds(customerIds).forEach(e -> customerMap.put(e.getId(), e));
+        remoteFileService.selectByIds(avatarIds).forEach(e -> avatarMap.put(e.getOssId(), e));
 
         return TableDataInfo.build(page.convert(e -> {
             SysSubOrderPendingAcceptPageVo vo = new SysSubOrderPendingAcceptPageVo();
@@ -324,6 +373,8 @@ public class SysSubOrderServiceImpl implements ISysSubOrderService {
             if (pet != null) {
                 vo.setPetName(pet.getName());
                 vo.setBreed(pet.getBreed());
+                vo.setPetAvatar(pet.getAvatar());
+                vo.setPetAvatarUrl(avatarMap.containsKey(pet.getAvatar()) ? avatarMap.get(pet.getAvatar()).getUrl() : null);
             }
             vo.setStore(e.getStore());
 //            vo.setStoreName();
@@ -396,10 +447,40 @@ public class SysSubOrderServiceImpl implements ISysSubOrderService {
     @Override
     public SysSubOrderCountVo count() {
         SysSubOrderCountVo vo = new SysSubOrderCountVo();
-        vo.setTotal(0L);
-        vo.setReject(0L);
-        vo.setAward(0L);
-        vo.setPunishment(0L);
+
+        List<Long> total = new ArrayList<>();
+        List<Long> reject = new ArrayList<>();
+        List<Long> completed = new ArrayList<>();
+        AtomicLong price = new AtomicLong(0L);
+
+        subOrderLogMapper.selectList(
+            Wrappers.lambdaQuery(SysSubOrderLog.class)
+                .eq(SysSubOrderLog::getActionerType, OrderLogActionerTypeEnum.FULFILLER.getValue())
+                .eq(SysSubOrderLog::getActioner, LoginHelper.getUserId())
+        ).forEach(e -> {
+            if (!total.contains(e.getSubOrderId())) {
+                total.add(e.getSubOrderId());
+            }
+            if (e.getStep().equals(OrderLogFulfillerStepEnum.REJECT.getStep())) {
+                if (!reject.contains(e.getSubOrderId())) {
+                    reject.add(e.getSubOrderId());
+                }
+            } else if (e.getStep().equals(OrderLogFulfillerStepEnum.COMPLETED.getStep())) {
+                if (!completed.contains(e.getSubOrderId())) {
+                    completed.add(e.getSubOrderId());
+                }
+            }
+        });
+
+        baseMapper.selectList(
+            Wrappers.lambdaQuery(SysSubOrder.class)
+                .in(SysSubOrder::getId, WrapperUtils.convertIds(completed))
+        ).forEach(e -> price.addAndGet(e.getPrice()));
+
+        vo.setTotal((long) total.size());
+        vo.setReject((long) reject.size());
+        vo.setCompleted((long) completed.size());
+        vo.setPrice(price.get());
         return vo;
     }
 
@@ -498,6 +579,7 @@ public class SysSubOrderServiceImpl implements ISysSubOrderService {
             .eq(bo.getService() != null, SysSubOrder::getService, bo.getService())
             .ge(bo.getStartServiceTime() != null, SysSubOrder::getServiceTime, bo.getStartServiceTime())
             .le(bo.getEndServiceTime() != null, SysSubOrder::getServiceTime, bo.getEndServiceTime())
+            .eq(SysSubOrder::getFulfiller, LoginHelper.getUserId())
             .orderByDesc(SysSubOrder::getId);
 
         if (StringUtils.isNotBlank(bo.getContent())) {
@@ -509,14 +591,20 @@ public class SysSubOrderServiceImpl implements ISysSubOrderService {
 
         List<Long> petIds = new ArrayList<>();
         List<Long> customerIds = new ArrayList<>();
+        List<Long> avatarIds = new ArrayList<>();
         Map<Long, RemotePetVo> petMap = new HashMap<>();
         Map<Long, RemoteCustomerVo> customerMap = new HashMap<>();
+        Map<Long, RemoteFile> avatarMap = new HashMap<>();
         page.getRecords().forEach(e -> {
             petIds.add(e.getUsrPet());
             customerIds.add(e.getUsrCustomer());
         });
-        remotePetService.getByIds(petIds).forEach(e -> petMap.put(e.getId(), e));
+        remotePetService.getByIds(petIds).forEach(e -> {
+            petMap.put(e.getId(), e);
+            avatarIds.add(e.getAvatar());
+        });
         remoteCustomerService.getByIds(customerIds).forEach(e -> customerMap.put(e.getId(), e));
+        remoteFileService.selectByIds(avatarIds).forEach(e -> avatarMap.put(e.getOssId(), e));
 
         return TableDataInfo.build(page.convert(e -> {
             SysSubOrderListOnMyOrderPageVo vo = new SysSubOrderListOnMyOrderPageVo();
@@ -529,6 +617,8 @@ public class SysSubOrderServiceImpl implements ISysSubOrderService {
             if (pet != null) {
                 vo.setPetName(pet.getName());
                 vo.setBreed(pet.getBreed());
+                vo.setPetAvatar(pet.getAvatar());
+                vo.setPetAvatarUrl(avatarMap.containsKey(pet.getAvatar()) ? avatarMap.get(pet.getAvatar()).getUrl() : null);
             }
             vo.setStore(e.getStore());
 //            vo.setStoreName();

+ 28 - 9
ruoyi-modules/yingpaipay-service/src/main/java/org/dromara/service/dubbo/RemoteStoreServiceServiceImpl.java

@@ -19,15 +19,34 @@ public class RemoteStoreServiceServiceImpl implements RemoteStoreServiceService
     private final SysStoreServiceMapper baseMapper;
 
     @Override
-    public boolean insertBatch(List<RemoteStoreServiceBo> list) {
-        return baseMapper.insertBatch(
-            list.stream().map(e -> {
-                SysStoreService entity = new SysStoreService();
-                entity.setStoreId(e.getStoreId());
-                entity.setServiceId(e.getServiceId());
-                return entity;
-            }).toList()
-        );
+    public boolean insertBatch(Long storeId, List<Long> serviceIds, boolean cleanFlag) {
+
+
+        if (cleanFlag) {
+            boolean deleteFlag = baseMapper.delete(
+                Wrappers.lambdaQuery(SysStoreService.class)
+                    .eq(SysStoreService::getStoreId, storeId)
+            ) == 0;
+            if (deleteFlag) {
+                throw new RuntimeException("批量删除失败");
+            }
+        }
+
+        if (!serviceIds.isEmpty()) {
+            boolean insertFlag = baseMapper.insertBatch(
+                serviceIds.stream().map(serviceId -> {
+                    SysStoreService entity = new SysStoreService();
+                    entity.setStoreId(storeId);
+                    entity.setServiceId(serviceId);
+                    return entity;
+                }).toList()
+            );
+            if (!insertFlag) {
+                throw new RuntimeException("批量插入失败");
+            }
+        }
+
+        return true;
     }
 
     @Override