Browse Source

feat:基础版升级更新加锁,加接口在升级完成后调用sys接口更新tenant,非匹配工单修改查询sql跟完成升级时的sql验证一致

ly 11 months ago
parent
commit
aaf631e2f2
29 changed files with 305 additions and 94 deletions
  1. 16 2
      pom.xml
  2. 1 1
      src/main/java/cn/ezhizao/EzhizaoApplication.java
  3. 67 0
      src/main/java/cn/ezhizao/framework/lock/DistributionLock.java
  4. 28 0
      src/main/java/cn/ezhizao/framework/lock/LockKey.java
  5. 50 19
      src/main/java/cn/ezhizao/project/business/upgrade/crmUpgradeController.java
  6. 5 1
      src/main/java/cn/ezhizao/project/business/upgrade/mapper/BizArchiveInputDetailUpdateMapper.java
  7. 2 0
      src/main/java/cn/ezhizao/project/business/upgrade/mapper/BizArchiveInputTempMapper.java
  8. 1 0
      src/main/java/cn/ezhizao/project/business/upgrade/mapper/BizWorkOrderUpdateMapper.java
  9. 2 1
      src/main/java/cn/ezhizao/project/business/upgrade/service/IBizArchiveInputDetailUpdateService.java
  10. 2 0
      src/main/java/cn/ezhizao/project/business/upgrade/service/IBizArchiveInputTempService.java
  11. 1 0
      src/main/java/cn/ezhizao/project/business/upgrade/service/IBizWorkOrderUpdateService.java
  12. 7 0
      src/main/java/cn/ezhizao/project/business/upgrade/service/impl/BizArchiveInputDetailUpdateServiceImpl.java
  13. 31 2
      src/main/java/cn/ezhizao/project/business/upgrade/service/impl/BizArchiveInputTempServiceImpl.java
  14. 9 1
      src/main/java/cn/ezhizao/project/business/upgrade/service/impl/BizWorkOrderUpdateServiceImpl.java
  15. 2 1
      src/main/java/cn/ezhizao/project/business/workOrder/mapper/BizWorkOrderDetailMapper.java
  16. 2 1
      src/main/java/cn/ezhizao/project/business/workOrder/mapper/BizWorkOrderMapper.java
  17. 1 1
      src/main/java/cn/ezhizao/project/business/workOrder/service/IBizWorkOrderDetailService.java
  18. 2 1
      src/main/java/cn/ezhizao/project/business/workOrder/service/IBizWorkOrderService.java
  19. 5 3
      src/main/java/cn/ezhizao/project/business/workOrder/service/impl/BizWorkOrderDetailServiceImpl.java
  20. 5 0
      src/main/java/cn/ezhizao/project/business/workOrder/service/impl/BizWorkOrderServiceImpl.java
  21. 15 0
      src/main/java/cn/ezhizao/project/fegin/FeignConfig.java
  22. 19 0
      src/main/java/cn/ezhizao/project/fegin/IFeignClient.java
  23. 3 0
      src/main/resources/mybatis/business/BizArchiveInputDetailUpdateMapper.xml
  24. 7 4
      src/main/resources/mybatis/business/BizArchiveInputMapper.xml
  25. 3 1
      src/main/resources/mybatis/business/BizArchiveInputTempMapper.xml
  26. 4 0
      src/main/resources/mybatis/business/BizWorkOrderDetailMapper.xml
  27. 2 10
      src/main/resources/mybatis/business/BizWorkOrderDetailUpdateMapper.xml
  28. 3 1
      src/main/resources/mybatis/business/BizWorkOrderMapper.xml
  29. 10 44
      src/main/resources/mybatis/business/BizWorkOrderUpdateMapper.xml

+ 16 - 2
pom.xml

@@ -75,7 +75,11 @@
             <artifactId>spring-boot-starter-test</artifactId>
             <scope>test</scope>
         </dependency>
-
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-loadbalancer</artifactId>
+            <version>3.1.3</version>
+        </dependency>
         <!-- SpringBoot 拦截器 -->
         <dependency>
             <groupId>org.springframework.boot</groupId>
@@ -106,7 +110,17 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-data-redis</artifactId>
         </dependency>
-
+        <dependency>
+            <groupId>org.redisson</groupId>
+            <artifactId>redisson-spring-boot-starter</artifactId>
+            <version>3.13.6</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.springframework.boot</groupId>
+                    <artifactId>spring-boot-starter-actuator</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
         <!-- pool 对象池 -->
         <dependency>
             <groupId>org.apache.commons</groupId>

+ 1 - 1
src/main/java/cn/ezhizao/EzhizaoApplication.java

@@ -12,7 +12,7 @@ import org.springframework.scheduling.annotation.EnableAsync;
  * @author ezhizao
  */
 @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
-@EnableFeignClients
+@EnableFeignClients(basePackages = "cn.ezhizao.project.fegin")
 @EnableAsync
 public class EzhizaoApplication
 {

+ 67 - 0
src/main/java/cn/ezhizao/framework/lock/DistributionLock.java

@@ -0,0 +1,67 @@
+package cn.ezhizao.framework.lock;
+
+
+import cn.ezhizao.common.utils.spring.SpringUtils;
+import org.redisson.api.RLock;
+import org.redisson.api.RedissonClient;
+
+import java.util.concurrent.TimeUnit;
+
+/**
+ * @author 韩方宇
+ */
+public class DistributionLock {
+
+    private final RLock lock;
+
+    public DistributionLock(String name) {
+        RedissonClient client = SpringUtils.getBean(RedissonClient.class);
+        this.lock = client.getLock(name);
+    }
+
+    public DistributionLock(String... names) {
+        RedissonClient client = SpringUtils.getBean(RedissonClient.class);
+
+        RLock[] lockList = new RLock[names.length];
+
+        for (Integer i = 0; i < names.length; i++) {
+            RLock rLock = client.getLock(names[i]);
+            lockList[i] = rLock;
+        }
+        this.lock = client.getMultiLock(lockList);
+    }
+
+    public void lock(Runnable func) {
+        this.lock();
+        try {
+            func.run();
+        } catch (Exception e) {
+            throw e;
+        } finally {
+            this.unlock();
+        }
+    }
+
+    public void lock() {
+        this.lock(5, 30, TimeUnit.SECONDS);
+    }
+
+    public void lock(long leaseTime, TimeUnit unit) {
+        this.lock(-1, leaseTime, unit);
+    }
+
+    public void lock(long waitTime, long leaseTime, TimeUnit unit) {
+        try {
+            boolean result = this.lock.tryLock(waitTime, leaseTime, unit);
+            if (!result) {
+                throw new RuntimeException("加锁失败");
+            }
+        } catch (Exception e) {
+            throw new RuntimeException("加锁失败");
+        }
+    }
+
+    public void unlock() {
+        this.lock.unlock();
+    }
+}

+ 28 - 0
src/main/java/cn/ezhizao/framework/lock/LockKey.java

@@ -0,0 +1,28 @@
+package cn.ezhizao.framework.lock;
+
+
+public class LockKey {
+
+    public static String join(String prefix, Object... vars) {
+        StringBuilder builder = new StringBuilder(prefix);
+        for (Object var : vars) {
+            builder.append(":");
+            builder.append(var);
+        }
+        return builder.toString();
+    }
+
+    /**
+     * 测试
+     */
+    public static final String DEMO = "lock:demo";
+
+    public static final String SALARYZERO = "lock:salaryZero";
+    public static final String SALARY = "lock:salary";
+    public static final String INCOMETAX = "lock:incomeTax";
+    public static final String INCOMETAXZERO = "lock:incomeTaxZero";
+    public static final String VERIFYNOZERO = "lock:incomeTaxZero";
+    public static final String REPORTTAXNONZERODETAIL = "lock:reportTaxnonZero";
+    public static final String REPORTTAXZERODETAIL = "lock:reportTaxZeroDetail";
+    public static final String REPOR_UPDATE = "lock:UPGRADE_UPDATE";
+}

+ 50 - 19
src/main/java/cn/ezhizao/project/business/upgrade/crmUpgradeController.java

@@ -5,13 +5,18 @@ import cn.ezhizao.common.utils.poi.ExcelUtil;
 import cn.ezhizao.framework.aspectj.lang.annotation.Excel;
 import cn.ezhizao.framework.aspectj.lang.annotation.Log;
 import cn.ezhizao.framework.aspectj.lang.enums.BusinessType;
+import cn.ezhizao.framework.lock.DistributionLock;
+import cn.ezhizao.framework.lock.LockKey;
 import cn.ezhizao.framework.web.controller.BaseController;
 import cn.ezhizao.framework.web.domain.AjaxResult;
 import cn.ezhizao.project.business.order.domain.OrderExcelImportLoopModel;
+import cn.ezhizao.project.business.upgrade.domain.BizWorkOrderUpdate;
 import cn.ezhizao.project.business.upgrade.service.IBizArchiveInputTempService;
 import cn.ezhizao.project.business.upgrade.service.IBizWorkOrderUpdateService;
 import cn.ezhizao.project.business.workOrder.domain.BizWorkOrder;
 import cn.ezhizao.project.business.workOrder.service.IBizWorkOrderService;
+import cn.ezhizao.project.fegin.IFeignClient;
+import cn.ezhizao.project.tenant.service.ITenantService;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -34,24 +39,36 @@ public class crmUpgradeController extends BaseController {
     private IBizWorkOrderUpdateService bizWorkOrderUpdateService;
     @Resource
     private IBizWorkOrderService bizWorkOrderService;
+    @Resource
+    private IFeignClient tenantService;
     @Log(title = "合同导入", businessType = BusinessType.IMPORT)
     @PreAuthorize("@ss.hasPermi('business:upgrade:order:import')")
     @PostMapping("/order/importLoop")
     @Transactional
     public AjaxResult importLoop(MultipartFile file) throws Exception {
-        ExcelUtil<OrderExcelImportLoopModel> util = new ExcelUtil<>(OrderExcelImportLoopModel.class);
-        List<OrderExcelImportLoopModel> orderList = util.importExcel(file.getInputStream());
+        String join = LockKey.join(LockKey.REPOR_UPDATE,getTenantId());
+        DistributionLock lock = new DistributionLock(join);
+        try {
+            lock.lock();
+            ExcelUtil<OrderExcelImportLoopModel> util = new ExcelUtil<>(OrderExcelImportLoopModel.class);
+            List<OrderExcelImportLoopModel> orderList = util.importExcel(file.getInputStream());
 
-        // 获取 入Excel 表头字段
-        List<String> excelHeaders = util.readExcelHeaders(file.getInputStream());
-        //获取实体类字段
-        List<String> names = getExcelAnnotatedFields(OrderExcelImportLoopModel.class);
-        //如果不存在模板中的字段,返回错误
-        if (!names.containsAll(excelHeaders)) {
-            return error("导入数据与模板不匹配!");
-        }
+            // 获取 入Excel 表头字段
+            List<String> excelHeaders = util.readExcelHeaders(file.getInputStream());
+            //获取实体类字段
+            List<String> names = getExcelAnnotatedFields(OrderExcelImportLoopModel.class);
+            //如果不存在模板中的字段,返回错误
+            if (!names.containsAll(excelHeaders)) {
+                return error("导入数据与模板不匹配!");
+            }
             String message = bizArchiveInputService.importLoop(orderList, SecurityUtils.getUserId(), getTenantId() == null ? 0 : getTenantId());
             return success(message);
+        }catch (Exception e){
+            logger.error(e.getMessage());
+            return error("错误请联系管理员");
+        }finally {
+            lock.unlock();
+        }
     }
 
     @Log(title = "基础版升级", businessType = BusinessType.INSERT)
@@ -59,21 +76,35 @@ public class crmUpgradeController extends BaseController {
     @PostMapping("/order/completeUpgrade")
     @Transactional
     public AjaxResult completeUpgrade() throws NoSuchFieldException, IllegalAccessException {
-        Long tenantId =0L;
-        String message = "升级成功,请刷新页面";
-        tenantId = getTenantId();
+        String join = LockKey.join(LockKey.REPOR_UPDATE,getTenantId());
+        DistributionLock lock = new DistributionLock(join);
+        String message = "升级成功,请关闭浏览器重新进入";
+        try {
+            lock.lock();
+            Long tenantId = 0L;
+            tenantId = getTenantId();
+            bizArchiveInputService.inputUpgrade(tenantId);
+            List<BizWorkOrder> waitingForUpgradingList = bizWorkOrderService.lambdaQuery().eq(BizWorkOrder::getTenantId,tenantId).list();
+            bizWorkOrderUpdateService.workerUpgrade(waitingForUpgradingList,tenantId);
+            tenantService.completeUpgrade(tenantId,1L);
+        }catch (Exception e){
+            logger.error(e.getMessage());
+            return error("错误请联系管理员");
+        }finally {
+            lock.unlock();
+        }
 
-        List<BizWorkOrder> waitingForUpgradingList = bizWorkOrderService.lambdaQuery().eq(BizWorkOrder::getTenantId,tenantId).list();
-        bizWorkOrderUpdateService.workerUpgrade(waitingForUpgradingList,tenantId);
-        return success(message);
+       return success(message);
     }
     @Log(title = "基础版升级", businessType = BusinessType.OTHER)
     @PreAuthorize("@ss.hasPermi('business:upgrade:order:list')")
     @PostMapping("/order/checkWorkOrder")
     public AjaxResult checkWorkOrder(){
-
-        Long count = bizWorkOrderService.query().eq("contract_id",0).eq("tenant_id",getTenantId()).count();
-        if (null!= count && count > 0L) {
+        BizWorkOrderUpdate query = new BizWorkOrderUpdate();
+        query.setTenantId(getTenantId());
+        query.setType(1);
+        Long count = bizWorkOrderUpdateService.getToUpLoadCount(query);
+        if (null != count && count>0L) {
             return success("false");
         }
         return success("false");

+ 5 - 1
src/main/java/cn/ezhizao/project/business/upgrade/mapper/BizArchiveInputDetailUpdateMapper.java

@@ -1,6 +1,10 @@
 package cn.ezhizao.project.business.upgrade.mapper;
 
 import java.util.List;
+
+import cn.ezhizao.project.business.order.domain.BizArchiveInput;
+import cn.ezhizao.project.business.order.domain.BizArchiveInputDetail;
+import cn.ezhizao.project.business.upgrade.domain.BizArchiveInputUpdate;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import cn.ezhizao.project.business.upgrade.domain.BizArchiveInputDetailUpdate;
 import org.apache.ibatis.annotations.Param;
@@ -27,7 +31,7 @@ public interface BizArchiveInputDetailUpdateMapper extends BaseMapper<BizArchive
      * @return 删除结果
     */
     public int physicalDelete(BizArchiveInputDetailUpdate bizArchiveInputDetailUpdate);
-
+    public List<BizArchiveInputDetail> selectByUpgradeId(BizArchiveInputDetailUpdate bizArchiveInputDetailUpdate);
     BizArchiveInputDetailUpdate getDetail(BizArchiveInputDetailUpdate detail);
     List<Long> selectByTaskIdAndCompanyId(@Param("companyId")Long companyId,@Param("taskIds") List<Long>taskIds);
 }

+ 2 - 0
src/main/java/cn/ezhizao/project/business/upgrade/mapper/BizArchiveInputTempMapper.java

@@ -2,6 +2,7 @@ package cn.ezhizao.project.business.upgrade.mapper;
 
 import java.util.List;
 
+import cn.ezhizao.project.business.order.domain.BizArchiveInput;
 import cn.ezhizao.project.business.order.domain.vo.InputVo;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import cn.ezhizao.project.business.upgrade.domain.BizArchiveInputUpdate;
@@ -29,4 +30,5 @@ public interface BizArchiveInputTempMapper extends BaseMapper<BizArchiveInputUpd
     */
     public int physicalDelete(BizArchiveInputUpdate bizArchiveInputUpdate);
     List<BizArchiveInputUpdate> getListByInput(InputVo bizArchiveInput);
+    public List<BizArchiveInput> selectByUpgradeId(BizArchiveInputUpdate bizArchiveInputUpdate);
 }

+ 1 - 0
src/main/java/cn/ezhizao/project/business/upgrade/mapper/BizWorkOrderUpdateMapper.java

@@ -33,4 +33,5 @@ public interface BizWorkOrderUpdateMapper extends BaseMapper<BizWorkOrderUpdate>
 
     List<BizWorkOrderUpdate> gettoUpLoadList(BizWorkOrderUpdate bizWorkOrder);
     List<BizWorkOrder> selectByUpgradeId(BizWorkOrder query);
+    Long getToUpLoadCount(BizWorkOrderUpdate bizWorkOrder);
 }

+ 2 - 1
src/main/java/cn/ezhizao/project/business/upgrade/service/IBizArchiveInputDetailUpdateService.java

@@ -2,6 +2,7 @@ package cn.ezhizao.project.business.upgrade.service;
 
 import java.util.List;
 
+import cn.ezhizao.project.business.order.domain.BizArchiveInputDetail;
 import com.baomidou.mybatisplus.extension.service.IService;
 import cn.ezhizao.project.business.upgrade.domain.BizArchiveInputDetailUpdate;
 
@@ -29,5 +30,5 @@ public interface IBizArchiveInputDetailUpdateService extends IService<BizArchive
     public int physicalDelete(BizArchiveInputDetailUpdate bizArchiveInputDetailUpdate);
     public BizArchiveInputDetailUpdate getDetail(BizArchiveInputDetailUpdate detail);
     List<Long> selectByTaskIdAndCompanyId(Long companyId,List<Long>taskIds);
-
+    public List<BizArchiveInputDetail> selectByUpgradeId(BizArchiveInputDetailUpdate bizArchiveInputDetailUpdate);
 }

+ 2 - 0
src/main/java/cn/ezhizao/project/business/upgrade/service/IBizArchiveInputTempService.java

@@ -33,4 +33,6 @@ public interface IBizArchiveInputTempService extends IService<BizArchiveInputUpd
 
     String importLoop(List<OrderExcelImportLoopModel> orderList, Long userId, long l);
     public boolean deleteArchiveInput(Long tentantId,Long inputId);
+
+    void inputUpgrade(Long tentantId);
 }

+ 1 - 0
src/main/java/cn/ezhizao/project/business/upgrade/service/IBizWorkOrderUpdateService.java

@@ -34,4 +34,5 @@ public interface IBizWorkOrderUpdateService extends IService<BizWorkOrderUpdate>
     List<BizWorkOrderUpdate> gettoUpLoadList(BizWorkOrderUpdate bizWorkOrder);
 
     void workerUpgrade(List<BizWorkOrder> bizWorkOrder, Long tenantId);
+    Long getToUpLoadCount(BizWorkOrderUpdate bizWorkOrder);
 }

+ 7 - 0
src/main/java/cn/ezhizao/project/business/upgrade/service/impl/BizArchiveInputDetailUpdateServiceImpl.java

@@ -1,8 +1,10 @@
 package cn.ezhizao.project.business.upgrade.service.impl;
 
+import java.util.Collections;
 import java.util.List;
 import javax.annotation.Resource;
 
+import cn.ezhizao.project.business.order.domain.BizArchiveInputDetail;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
 import cn.ezhizao.project.business.upgrade.mapper.BizArchiveInputDetailUpdateMapper;
@@ -47,4 +49,9 @@ public class BizArchiveInputDetailUpdateServiceImpl  extends ServiceImpl<BizArch
     public List<Long> selectByTaskIdAndCompanyId(Long companyId,List<Long>taskIds){
         return bizArchiveInputDetailUpdateMapper.selectByTaskIdAndCompanyId(companyId,taskIds);
     }
+
+    @Override
+    public List<BizArchiveInputDetail> selectByUpgradeId(BizArchiveInputDetailUpdate bizArchiveInputDetailUpdate) {
+        return bizArchiveInputDetailUpdateMapper.selectByUpgradeId(bizArchiveInputDetailUpdate);
+    }
 }

+ 31 - 2
src/main/java/cn/ezhizao/project/business/upgrade/service/impl/BizArchiveInputTempServiceImpl.java

@@ -12,9 +12,13 @@ import cn.ezhizao.project.business.channel.domain.BizChannel;
 import cn.ezhizao.project.business.channel.service.IBizChannelService;
 import cn.ezhizao.project.business.company.domain.BizCompany;
 import cn.ezhizao.project.business.company.service.IBizCompanyService;
+import cn.ezhizao.project.business.order.domain.BizArchiveInput;
+import cn.ezhizao.project.business.order.domain.BizArchiveInputDetail;
 import cn.ezhizao.project.business.order.domain.OrderExcelImportLoopGroupModel;
 import cn.ezhizao.project.business.order.domain.OrderExcelImportLoopModel;
 import cn.ezhizao.project.business.order.domain.vo.InputVo;
+import cn.ezhizao.project.business.order.service.IBizArchiveInputDetailService;
+import cn.ezhizao.project.business.order.service.IBizArchiveInputService;
 import cn.ezhizao.project.business.settings.domain.BizSource;
 import cn.ezhizao.project.business.settings.service.IBizSourceService;
 import cn.ezhizao.project.business.workOrder.domain.BizWorkOrder;
@@ -44,7 +48,10 @@ import cn.ezhizao.project.business.upgrade.service.IBizArchiveInputTempService;
  */
 @Service
 public class BizArchiveInputTempServiceImpl extends ServiceImpl<BizArchiveInputTempMapper, BizArchiveInputUpdate> implements IBizArchiveInputTempService {
-
+    @Resource
+    private IBizArchiveInputDetailService bizArchiveInputDetailService;
+    @Resource
+    private IBizArchiveInputService bizArchiveInputService;
     @Resource
     private IBizArchiveInputDetailUpdateService bizArchiveInputDetailUpdateService;
     @Resource
@@ -590,7 +597,7 @@ public class BizArchiveInputTempServiceImpl extends ServiceImpl<BizArchiveInputT
                 if (!existWorkOrderDetailList.isEmpty()) {
                     BizWorkOrderDetail workOrderDetail = existWorkOrderDetailList.get(0);
                     BeanUtils.copyProperties(workOrderDetail, workOrderDetailUpdate);
-                    workOrderDetailUpdate.setId(workOrderDetail.getId());
+                    workOrderDetailUpdate.setSourceWorkOrderDetailId(workOrderDetail.getId());
                     existWorkOrderDetailList.remove(0);
                 } else {
                     workOrderDetailUpdate = new BizWorkOrderDetailUpdate();
@@ -671,4 +678,26 @@ public class BizArchiveInputTempServiceImpl extends ServiceImpl<BizArchiveInputT
         importarchiveinput(tenantId, inputUpdates);
         return true;
     }
+
+    @Override
+    public void inputUpgrade(Long tenantId) {
+        //在插入要升级的数据时需要删除原表同账套下的合同和详情
+        BizArchiveInput del = new BizArchiveInput();
+        del.setTenantId(tenantId);
+        bizArchiveInputService.physicalDelete(del);
+        //这个是详情
+        BizArchiveInputDetail del2 = new BizArchiveInputDetail();
+        del2.setTenantId(tenantId);
+        bizArchiveInputDetailService.physicalDelete(del2);
+        //这个是查询升级表的数据并用原表实体接受
+        BizArchiveInputUpdate query = new BizArchiveInputUpdate();
+        query.setTenantId(tenantId);
+        List<BizArchiveInput> bizArchiveInputList = bizArchiveInputTempMapper.selectByUpgradeId(query);
+        //因为合同确定没有存在在系统里的所以批量插入
+        bizArchiveInputService.saveBatch(bizArchiveInputList);
+        BizArchiveInputDetailUpdate query2 = new BizArchiveInputDetailUpdate();
+        query2.setTenantId(tenantId);
+        List<BizArchiveInputDetail> bizArchiveInputDetailList = bizArchiveInputDetailUpdateService.selectByUpgradeId(query2);
+        bizArchiveInputDetailService.saveBatch(bizArchiveInputDetailList);
+    }
 }

+ 9 - 1
src/main/java/cn/ezhizao/project/business/upgrade/service/impl/BizWorkOrderUpdateServiceImpl.java

@@ -70,7 +70,10 @@ public class BizWorkOrderUpdateServiceImpl  extends ServiceImpl<BizWorkOrderUpda
 
     @Override
     public void workerUpgrade(List<BizWorkOrder> waitingForUpgradingList, Long tenantId) {
-
+        //需要把工单和工单详情中的合同和合同详情id设置为0
+        bizWorkOrderService.updateByTenantId(tenantId);
+        bizWorkOrderDetailService.updateByTenantId(tenantId);
+        //这个是查询
         BizWorkOrder query = new BizWorkOrder();
         query.setTenantId(tenantId);
         BizWorkOrderDetail query2 = new BizWorkOrderDetail();
@@ -81,4 +84,9 @@ public class BizWorkOrderUpdateServiceImpl  extends ServiceImpl<BizWorkOrderUpda
         bizWorkOrderService.saveOrUpdateBatch(bizWorkOrderList);
         bizWorkOrderDetailService.saveOrUpdateBatch(bizWorkOrderDetailList);
     }
+
+    @Override
+    public Long getToUpLoadCount(BizWorkOrderUpdate bizWorkOrder) {
+        return bizWorkOrderUpdateMapper.getToUpLoadCount(bizWorkOrder);
+    }
 }

+ 2 - 1
src/main/java/cn/ezhizao/project/business/workOrder/mapper/BizWorkOrderDetailMapper.java

@@ -3,6 +3,7 @@ package cn.ezhizao.project.business.workOrder.mapper;
 import java.util.List;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import cn.ezhizao.project.business.workOrder.domain.BizWorkOrderDetail;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * 工单明细Mapper接口
@@ -26,6 +27,6 @@ public interface BizWorkOrderDetailMapper extends BaseMapper<BizWorkOrderDetail>
      * @return 删除结果
     */
     public int physicalDelete(BizWorkOrderDetail bizWorkOrderDetail);
-
+    public void updateByTenantId(@Param("tenantId") Long tenantId);
     BizWorkOrderDetail getDetail(BizWorkOrderDetail workOrderDetaul);
 }

+ 2 - 1
src/main/java/cn/ezhizao/project/business/workOrder/mapper/BizWorkOrderMapper.java

@@ -5,6 +5,7 @@ import java.util.Map;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import cn.ezhizao.project.business.workOrder.domain.BizWorkOrder;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * 工单信息Mapper接口
@@ -48,6 +49,6 @@ public interface BizWorkOrderMapper extends BaseMapper<BizWorkOrder>
     public int stopTasks(List<Map<String, Object>> tableValues);
 
     int setContinue(List<Long> ids, Integer state);
-
+    public void updateByTenantId(@Param("tenantId") Long tenantId);
     List<BizWorkOrder> getList2(BizWorkOrder bizWorkOrder);
 }

+ 1 - 1
src/main/java/cn/ezhizao/project/business/workOrder/service/IBizWorkOrderDetailService.java

@@ -26,6 +26,6 @@ public interface IBizWorkOrderDetailService extends IService<BizWorkOrderDetail>
      * @return 删除结果
      */
     public int physicalDelete(BizWorkOrderDetail bizWorkOrderDetail);
-
+    public void updateByTenantId(Long tenantId);
     BizWorkOrderDetail getDetail(BizWorkOrderDetail workOrderDetaul);
 }

+ 2 - 1
src/main/java/cn/ezhizao/project/business/workOrder/service/IBizWorkOrderService.java

@@ -5,6 +5,7 @@ import java.util.Map;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import cn.ezhizao.project.business.workOrder.domain.BizWorkOrder;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * 工单信息Service接口
@@ -49,6 +50,6 @@ public interface IBizWorkOrderService extends IService<BizWorkOrder>
     public int stopTasks(List<Map<String, Object>>tableValues);
 
     int setContinue(List<Long> ids, Integer state);
-
+    public void updateByTenantId(Long tenantId);
     List<BizWorkOrder> getList2(BizWorkOrder bizWorkOrder);
 }

+ 5 - 3
src/main/java/cn/ezhizao/project/business/workOrder/service/impl/BizWorkOrderDetailServiceImpl.java

@@ -40,11 +40,13 @@ public class BizWorkOrderDetailServiceImpl  extends ServiceImpl<BizWorkOrderDeta
     @Override
     public int physicalDelete(BizWorkOrderDetail bizWorkOrderDetail){ return bizWorkOrderDetailMapper.physicalDelete(bizWorkOrderDetail); }
 
+    @Override
+    public void updateByTenantId(Long tenantId) {
+        bizWorkOrderDetailMapper.updateByTenantId(tenantId);
+    }
+
     @Override
     public BizWorkOrderDetail getDetail(BizWorkOrderDetail workOrderDetaul) {
         return bizWorkOrderDetailMapper.getDetail(workOrderDetaul);
     }
-
-    ;
-
 }

+ 5 - 0
src/main/java/cn/ezhizao/project/business/workOrder/service/impl/BizWorkOrderServiceImpl.java

@@ -61,6 +61,11 @@ public class BizWorkOrderServiceImpl  extends ServiceImpl<BizWorkOrderMapper, Bi
         return bizWorkOrderMapper.setContinue(ids, state);
     }
 
+    @Override
+    public void updateByTenantId(Long tenantId) {
+        bizWorkOrderMapper.updateByTenantId(tenantId);
+    }
+
     @Override
     public List<BizWorkOrder> getList2(BizWorkOrder bizWorkOrder) {
         return bizWorkOrderMapper.getList2(bizWorkOrder);

+ 15 - 0
src/main/java/cn/ezhizao/project/fegin/FeignConfig.java

@@ -0,0 +1,15 @@
+package cn.ezhizao.project.fegin;
+
+import feign.Retryer;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class FeignConfig {
+
+    @Bean
+    public Retryer feignRetryer() {
+        return new Retryer.Default(100, 1000, 4); // 最大重试间隔1000ms,最多重试4次
+    }
+
+}

+ 19 - 0
src/main/java/cn/ezhizao/project/fegin/IFeignClient.java

@@ -0,0 +1,19 @@
+package cn.ezhizao.project.fegin;
+
+import cn.ezhizao.framework.web.domain.AjaxResult;
+import cn.ezhizao.project.tenant.domain.Tenant;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
+
+@FeignClient(name = "ezhizao-yzbh-sys")
+public interface IFeignClient {
+
+    @PostMapping("/business/tenant/completeUpgrade/updateTenant")
+    AjaxResult completeUpgrade(@RequestParam("tenantId")Long tenantId
+            ,@RequestParam("versionId") Long versionId);
+}

+ 3 - 0
src/main/resources/mybatis/business/BizArchiveInputDetailUpdateMapper.xml

@@ -37,6 +37,9 @@
             </if>
         </trim>
     </select>
+    <select id="selectByUpgradeId" parameterType="cn.ezhizao.project.business.upgrade.domain.BizArchiveInputDetailUpdate" resultType="cn.ezhizao.project.business.order.domain.BizArchiveInputDetail">
+        select * from biz_archive_input_detail_update where tenant_id = #{tenantId} and deleted = 0
+    </select>
     <select id="getDetail" parameterType="BizArchiveInputDetailUpdate" resultMap="BizArchiveInputDetailResult">
         SELECT *
         FROM biz_archive_input_detail_update

+ 7 - 4
src/main/resources/mybatis/business/BizArchiveInputMapper.xml

@@ -199,11 +199,14 @@
 
     <delete id="physicalDelete">
         DELETE FROM biz_archive_input
-        <trim prefix=" WHERE" suffix="" suffixOverrides="AND">
+        <where>
             <if test="id != null">
-                id = #{id} AND
+                AND  id = #{id}
             </if>
-            <!-- 删除条件为其他外键可以在这里加 -->
-        </trim>
+            <if test="tenantId != null">
+                AND  tenant_id = #{tenantId}
+            </if>
+        </where>
+
     </delete>
 </mapper>

+ 3 - 1
src/main/resources/mybatis/business/BizArchiveInputTempMapper.xml

@@ -23,7 +23,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         from biz_archive_input_detail_update
         where contract_id = #{id}
     </select>
-
+    <select id="selectByUpgradeId" parameterType="cn.ezhizao.project.business.upgrade.domain.BizArchiveInputUpdate" resultType="cn.ezhizao.project.business.order.domain.BizArchiveInput">
+        select * from biz_archive_input_update where tenant_id = #{tenantId} and deleted = 0
+    </select>
     <select id="selectBatchIds" resultMap="BizArchiveInputDetailResult">
         select * from biz_archive_input_update where id in
         <foreach item="id" index="index" collection="coll" open="(" separator="," close=")">

+ 4 - 0
src/main/resources/mybatis/business/BizWorkOrderDetailMapper.xml

@@ -53,6 +53,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </trim>
     </select>
 
+    <update id="updateByTenantId">
+        update biz_work_order_detail set contract_id = 0,contract_detail_id = 0  where tenant_id = #{tenantId}
+    </update>
+
     <delete id="physicalDelete">
         DELETE FROM biz_work_order_detail
         <trim prefix=" WHERE" suffix="" suffixOverrides="AND">

+ 2 - 10
src/main/resources/mybatis/business/BizWorkOrderDetailUpdateMapper.xml

@@ -28,17 +28,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </select>
     <select id="selectByUpgradeId" parameterType="BizWorkOrderDetail" resultType="cn.ezhizao.project.business.workOrder.domain.BizWorkOrderDetail">
         SELECT * FROM biz_work_order_detail_update
-        <trim prefix=" WHERE" suffix="" suffixOverrides="AND">
-            deleted = 0
-            <if test="id != null "> AND id = #{id}</if>
+        <where>
             <if test="tenantId != null "> AND tenant_id = #{tenantId}</if>
-            <if test="workOrderId != null "> AND work_order_id = #{workOrderId}</if>
-            <if test="companyId != null "> AND company_id = #{companyId}</if>
-            <if test="contractDetailId != null "> AND contract_detail_id = #{contractDetailId}</if>
-            <if test="contractId != null "> AND contract_id = #{contractId}</if>
-            <if test="serviceNum != null "> AND service_num = #{serviceNum}</if>
-            <if test="freeNum != null "> AND free_num = #{freeNum}</if>
-        </trim>
+        </where>
     </select>
     <select id="getAccountsReceivable" resultType="java.math.BigDecimal">
         SELECT true_amount FROM biz_archive_input_update

+ 3 - 1
src/main/resources/mybatis/business/BizWorkOrderMapper.xml

@@ -187,5 +187,7 @@
             update ${item.tableName} set is_stop = 1 where work_order_id = #{item.workOrderId}
         </foreach>
     </update>
-
+    <update id="updateByTenantId">
+        update biz_work_order set contract_id = 0,contract_detail_id = 0  where tenant_id = #{tenantId}
+    </update>
 </mapper>

+ 10 - 44
src/main/resources/mybatis/business/BizWorkOrderUpdateMapper.xml

@@ -83,56 +83,22 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         left join biz_task_type_detail t4 on t4.id = t1.task_type_detail_id
         left join sys_user t5 on t5.user_id = t1.service_id
         <trim prefix=" WHERE" suffix="" suffixOverrides="AND">
-            t1.deleted = 0 and t1.is_stop = 0 and orderupdate.id is null and t1.type = 1
-            <if test="id != null "> AND t1.id = #{id}</if>
-            <if test="contractDetailId != null "> AND t1.contract_detail_id = #{contractDetailId}</if>
+            orderupdate.id is null and t1.type = 1
+            <if test="tenantId != null "> AND t1.tenant_id = #{tenantId}</if>
+        </trim>
+    </select>
+    <select id="getToUpLoadCount" parameterType="BizWorkOrderUpdate" resultType="java.lang.Long">
+        SELECT count(*) FROM biz_work_order t1
+        left join biz_work_order_update orderupdate on orderupdate.id = t1.id and orderupdate.deleted = 0
+        <trim prefix=" WHERE" suffix="" suffixOverrides="AND">
+            orderupdate.id is null and t1.type = 1
             <if test="tenantId != null "> AND t1.tenant_id = #{tenantId}</if>
-            <if test="companyId != null "> AND t1.company_id = #{companyId}</if>
-            <if test="type != null ">AND t1.type = #{type}</if>
-            <if test=" serviceId != null">AND t1.service_id = #{serviceId}</if>
-            <if test="workOrderNo != null  and workOrderNo != ''">AND t1.work_order_no = #{workOrderNo}</if>
-            <if test="startMonth != null ">AND t1.start_month = #{startMonth}</if>
-            <if test="endMonth != null ">AND t1.end_month = #{endMonth}</if>
-            <if test="monthNum != null ">AND t1.month_num = #{monthNum}</if>
-            <if test="companyName != null and companyName != '' "> AND t2.name like concat('%', #{companyName}, '%')</if>
-            <if test="isStop != null ">AND t1.is_stop = #{isStop}</if>
-            <if test="year != null ">
-                AND t1.start_month > 0
-                <if test="month != null and month != ''">
-                    AND concat(#{year}, '-', #{month}, '-01') &gt;= (case when t1.task_type_id = 1 then DATE_ADD(t1.start_month, interval 1 month) else t1.start_month end) and concat(#{year}, '-', #{month}, '-01') &lt;= (case when t1.task_type_id = 1 then DATE_ADD(t1.end_month,interval 1 month) else t1.end_month end)
-                </if>
-                <if test="month == null or month == ''">
-                    AND #{year} >= (case when t1.task_type_id = 1 then DATE_FORMAT(DATE_ADD(t1.start_month,interval 1 month), '%Y') else DATE_FORMAT(t1.start_month, '%Y') end) AND #{year} &lt;= (case when t1.end_month = 0 then #{year} when t1.task_type_id = 1 then DATE_FORMAT(DATE_ADD(t1.end_month,interval 1 month), '%Y') else DATE_FORMAT(t1.end_month, '%Y') end)
-                </if>
-            </if>
-
-
         </trim>
     </select>
     <select id="selectByUpgradeId" resultType="cn.ezhizao.project.business.workOrder.domain.BizWorkOrder">
         select * from biz_work_order_update t1
         <where>
-                t1.deleted = 0 and t1.is_stop = 0 and t1.type = 1
-                <if test="id != null "> AND t1.id = #{id}</if>
-                <if test="contractDetailId != null "> AND t1.contract_detail_id = #{contractDetailId}</if>
-                <if test="tenantId != null "> AND t1.tenant_id = #{tenantId}</if>
-                <if test="companyId != null "> AND t1.company_id = #{companyId}</if>
-                <if test=" serviceId != null">AND t1.service_id = #{serviceId}</if>
-                <if test="workOrderNo != null  and workOrderNo != ''">AND t1.work_order_no = #{workOrderNo}</if>
-                <if test="startMonth != null ">AND t1.start_month = #{startMonth}</if>
-                <if test="endMonth != null ">AND t1.end_month = #{endMonth}</if>
-                <if test="monthNum != null ">AND t1.month_num = #{monthNum}</if>
-                <if test="companyName != null and companyName != '' "> AND t2.name like concat('%', #{companyName}, '%')</if>
-                <if test="isStop != null ">AND t1.is_stop = #{isStop}</if>
-                <if test="year != null ">
-                    AND t1.start_month > 0
-                    <if test="month != null and month != ''">
-                        AND concat(#{year}, '-', #{month}, '-01') &gt;= (case when t1.task_type_id = 1 then DATE_ADD(t1.start_month, interval 1 month) else t1.start_month end) and concat(#{year}, '-', #{month}, '-01') &lt;= (case when t1.task_type_id = 1 then DATE_ADD(t1.end_month,interval 1 month) else t1.end_month end)
-                    </if>
-                    <if test="month == null or month == ''">
-                        AND #{year} >= (case when t1.task_type_id = 1 then DATE_FORMAT(DATE_ADD(t1.start_month,interval 1 month), '%Y') else DATE_FORMAT(t1.start_month, '%Y') end) AND #{year} &lt;= (case when t1.end_month = 0 then #{year} when t1.task_type_id = 1 then DATE_FORMAT(DATE_ADD(t1.end_month,interval 1 month), '%Y') else DATE_FORMAT(t1.end_month, '%Y') end)
-                    </if>
-                </if>
+            <if test="tenantId != null "> and t1.tenant_id = #{tenantId}</if>
         </where>
 
     </select>