ezhizao_zx 1 éve
szülő
commit
eba7cbe2e8
58 módosított fájl, 5846 hozzáadás és 122 törlés
  1. 2 2
      src/main/java/cn/ezhizao/framework/web/domain/BaseEntity.java
  2. 102 0
      src/main/java/cn/ezhizao/project/business/companyContactor/controller/BizCompanyContactorController.java
  3. 78 0
      src/main/java/cn/ezhizao/project/business/companyContactor/domain/BizCompanyContactor.java
  4. 30 0
      src/main/java/cn/ezhizao/project/business/companyContactor/mapper/BizCompanyContactorMapper.java
  5. 31 0
      src/main/java/cn/ezhizao/project/business/companyContactor/service/IBizCompanyContactorService.java
  6. 44 0
      src/main/java/cn/ezhizao/project/business/companyContactor/service/impl/BizCompanyContactorServiceImpl.java
  7. 102 0
      src/main/java/cn/ezhizao/project/business/companyFollow/controller/BizCompanyFollowDetailController.java
  8. 76 0
      src/main/java/cn/ezhizao/project/business/companyFollow/domain/BizCompanyFollowDetail.java
  9. 30 0
      src/main/java/cn/ezhizao/project/business/companyFollow/mapper/BizCompanyFollowDetailMapper.java
  10. 31 0
      src/main/java/cn/ezhizao/project/business/companyFollow/service/IBizCompanyFollowDetailService.java
  11. 58 0
      src/main/java/cn/ezhizao/project/business/companyFollow/service/impl/BizCompanyFollowDetailServiceImpl.java
  12. 41 36
      src/main/java/cn/ezhizao/project/business/deduct/controller/BizDeductController.java
  13. 16 6
      src/main/java/cn/ezhizao/project/business/deduct/domain/BizDeduct.java
  14. 13 0
      src/main/java/cn/ezhizao/project/business/deposit/controller/BizDepositController.java
  15. 31 18
      src/main/java/cn/ezhizao/project/business/deposit/domain/BizDeposit.java
  16. 1 0
      src/main/java/cn/ezhizao/project/business/entrust/domain/BizEntrust.java
  17. 15 0
      src/main/java/cn/ezhizao/project/business/entrustOrder/controller/BizEntrustOrderController.java
  18. 25 14
      src/main/java/cn/ezhizao/project/business/entrustOrder/domain/BizEntrustOrder.java
  19. 242 0
      src/main/java/cn/ezhizao/project/business/order/domain/BizArchiveInput.java
  20. 56 0
      src/main/java/cn/ezhizao/project/business/order/domain/BizArchiveInputController.20231212.md
  21. 130 0
      src/main/java/cn/ezhizao/project/business/order/domain/BizArchiveInputDetail.java
  22. 59 0
      src/main/java/cn/ezhizao/project/business/order/domain/BizArchiveInputDetailProcess.java
  23. 122 0
      src/main/java/cn/ezhizao/project/business/order/domain/OrderExcelImportLoopModel.java
  24. 240 0
      src/main/java/cn/ezhizao/project/business/order/domain/OrderExcelImportOnceModel.java
  25. 32 0
      src/main/java/cn/ezhizao/project/business/order/mapper/BizArchiveInputDetailMapper.java
  26. 32 0
      src/main/java/cn/ezhizao/project/business/order/mapper/BizArchiveInputDetailProcessMapper.java
  27. 32 0
      src/main/java/cn/ezhizao/project/business/order/mapper/BizArchiveInputMapper.java
  28. 33 0
      src/main/java/cn/ezhizao/project/business/order/service/IBizArchiveInputDetailProcessService.java
  29. 33 0
      src/main/java/cn/ezhizao/project/business/order/service/IBizArchiveInputDetailService.java
  30. 53 0
      src/main/java/cn/ezhizao/project/business/order/service/IBizArchiveInputService.java
  31. 45 0
      src/main/java/cn/ezhizao/project/business/order/service/impl/BizArchiveInputDetailProcessServiceImpl.java
  32. 52 0
      src/main/java/cn/ezhizao/project/business/order/service/impl/BizArchiveInputDetailServiceImpl.java
  33. 1716 0
      src/main/java/cn/ezhizao/project/business/order/service/impl/BizArchiveInputServiceImpl.java
  34. 434 0
      src/main/java/cn/ezhizao/project/business/standardCpmpany/controller/BizStandardCompanyController.java
  35. 384 0
      src/main/java/cn/ezhizao/project/business/standardCpmpany/domain/BizStandardCompany.java
  36. 46 0
      src/main/java/cn/ezhizao/project/business/standardCpmpany/mapper/BizStandardCompanyMapper.java
  37. 51 0
      src/main/java/cn/ezhizao/project/business/standardCpmpany/service/IBizStandardCompanyService.java
  38. 104 0
      src/main/java/cn/ezhizao/project/business/standardCpmpany/service/impl/BizStandardCompanyServiceImpl.java
  39. 75 9
      src/main/java/cn/ezhizao/project/business/workOrder/controller/WorkOrderCurrentController.java
  40. 68 0
      src/main/java/cn/ezhizao/project/business/workOrder/controller/WorkOrderNextController.java
  41. 77 9
      src/main/java/cn/ezhizao/project/business/workOrder/controller/WorkOrderOnceController.java
  42. 38 16
      src/main/java/cn/ezhizao/project/business/workOrder/domain/BizWorkOrder.java
  43. 201 0
      src/main/java/cn/ezhizao/project/business/workOrder/domain/BizWorkOrderExport.java
  44. 201 0
      src/main/java/cn/ezhizao/project/business/workOrder/domain/BizWorkOrderOnce.java
  45. 198 0
      src/main/java/cn/ezhizao/project/business/workOrder/domain/BizWorkOrderOnceExport.java
  46. 2 0
      src/main/java/cn/ezhizao/project/business/workOrder/mapper/BizWorkOrderMapper.java
  47. 9 0
      src/main/java/cn/ezhizao/project/business/workOrder/service/IBizWorkOrderService.java
  48. 5 0
      src/main/java/cn/ezhizao/project/business/workOrder/service/impl/BizWorkOrderServiceImpl.java
  49. 2 0
      src/main/java/cn/ezhizao/project/tenant/mapper/TenantMapper.java
  50. 2 0
      src/main/java/cn/ezhizao/project/tenant/service/ITenantService.java
  51. 6 0
      src/main/java/cn/ezhizao/project/tenant/service/impl/TenantServiceImpl.java
  52. 1 2
      src/main/resources/application-dev.yml
  53. 1 1
      src/main/resources/application-linux.yml
  54. 50 0
      src/main/resources/mybatis/business/BizArchiveInputDetailMapper.xml
  55. 127 0
      src/main/resources/mybatis/business/BizArchiveInputMapper.xml
  56. 100 0
      src/main/resources/mybatis/business/BizStandardCompanyMapper.xml
  57. 54 9
      src/main/resources/mybatis/business/BizWorkOrderMapper.xml
  58. 7 0
      src/main/resources/mybatis/tenant/TenantMapper.xml

+ 2 - 2
src/main/java/cn/ezhizao/framework/web/domain/BaseEntity.java

@@ -40,7 +40,7 @@ public class BaseEntity implements Serializable
     /** 创建时间 */
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @TableField(value="create_time",fill= FieldFill.INSERT)
-    @Excel(name = "发单日期", width = 30, dateFormat = "yyyy-MM-dd",sort = 6)
+//    @Excel(name = "发单日期", width = 30, dateFormat = "yyyy-MM-dd",sort = 6)
     private Date createTime;
 
     /** 更新者 */
@@ -71,7 +71,7 @@ public class BaseEntity implements Serializable
     private Date updateTime;
 
     /** 备注 */
-    @Excel(name = "备注")
+//    @Excel(name = "备注")
     private String remark;
 
     /** 请求参数 */

+ 102 - 0
src/main/java/cn/ezhizao/project/business/companyContactor/controller/BizCompanyContactorController.java

@@ -0,0 +1,102 @@
+package cn.ezhizao.project.business.companyContactor.controller;
+
+import cn.ezhizao.common.utils.poi.ExcelUtil;
+import cn.ezhizao.framework.aspectj.lang.annotation.Log;
+import cn.ezhizao.framework.aspectj.lang.enums.BusinessType;
+import cn.ezhizao.framework.web.controller.BaseController;
+import cn.ezhizao.framework.web.domain.AjaxResult;
+import cn.ezhizao.framework.web.page.TableDataInfo;
+import cn.ezhizao.project.business.companyContactor.domain.BizCompanyContactor;
+import cn.ezhizao.project.business.companyContactor.service.IBizCompanyContactorService;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 客户联系人Controller
+ *
+ * @author ruoyi
+ * @date 2023-10-17
+ */
+@RestController
+@RequestMapping("/business/companyContactor")
+public class BizCompanyContactorController extends BaseController
+{
+    @Resource
+    private IBizCompanyContactorService bizCompanyContactorService;
+
+    /**
+     * 查询客户联系人列表
+     */
+    @PreAuthorize("@ss.hasPermi('business:companyContactor:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(BizCompanyContactor bizCompanyContactor) throws NoSuchFieldException, IllegalAccessException
+    {
+        setTenantId(bizCompanyContactor);
+        startPage();
+        List<BizCompanyContactor> list = bizCompanyContactorService.getList(bizCompanyContactor);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出客户联系人列表
+     */
+    @PreAuthorize("@ss.hasPermi('business:companyContactor:export')")
+    @Log(title = "客户联系人", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, BizCompanyContactor bizCompanyContactor) throws NoSuchFieldException, IllegalAccessException
+    {
+        setTenantId(bizCompanyContactor);
+        List<BizCompanyContactor> list = bizCompanyContactorService.getList(bizCompanyContactor);
+        ExcelUtil<BizCompanyContactor> util = new ExcelUtil<BizCompanyContactor>(BizCompanyContactor.class);
+        util.exportExcel(response, list, "客户联系人数据");
+    }
+
+    /**
+     * 获取客户联系人详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('business:companyContactor:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(bizCompanyContactorService.getById(id));
+    }
+
+    /**
+     * 新增客户联系人
+     */
+    @PreAuthorize("@ss.hasPermi('business:companyContactor:add')")
+    @Log(title = "客户联系人", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody BizCompanyContactor bizCompanyContactor) throws NoSuchFieldException, IllegalAccessException
+    {
+        setTenantId(bizCompanyContactor);
+        return toAjax(bizCompanyContactorService.save(bizCompanyContactor));
+    }
+
+    /**
+     * 修改客户联系人
+     */
+    @PreAuthorize("@ss.hasPermi('business:companyContactor:edit')")
+    @Log(title = "客户联系人", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody BizCompanyContactor bizCompanyContactor) throws NoSuchFieldException, IllegalAccessException
+    {
+        setTenantId(bizCompanyContactor);
+        return toAjax(bizCompanyContactorService.updateById(bizCompanyContactor));
+    }
+
+    /**
+     * 删除客户联系人
+     */
+    @PreAuthorize("@ss.hasPermi('business:companyContactor:remove')")
+    @Log(title = "客户联系人", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable List<Long> ids)
+    {
+        return toAjax(bizCompanyContactorService.removeBatchByIds(ids));
+    }
+}

+ 78 - 0
src/main/java/cn/ezhizao/project/business/companyContactor/domain/BizCompanyContactor.java

@@ -0,0 +1,78 @@
+package cn.ezhizao.project.business.companyContactor.domain;
+
+import cn.ezhizao.framework.aspectj.lang.annotation.Excel;
+import cn.ezhizao.framework.web.domain.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 客户联系人对象 biz_company_contactor
+ *
+ * @author ruoyi
+ * @date 2023-10-17
+ */
+@Data
+@TableName(value = "biz_company_contactor")
+public class BizCompanyContactor extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 客户外键id */
+    @ApiModelProperty(value = "${comment}")
+    private Long companyId;
+
+    /** 来源于执照设立的外键 */
+    @ApiModelProperty(value = "${comment}")
+    private Long fromId;
+
+    /** 来源类型 股东/财务负责人/监事 */
+    @Excel(name = "来源类型 股东/财务负责人/监事")
+    @ApiModelProperty(value = "来源类型 股东/财务负责人/监事")
+    private String fromType;
+
+    /** 联系人姓名 */
+    @Excel(name = "联系人姓名")
+    @ApiModelProperty(value = "联系人姓名")
+    private String name;
+
+    /** 职务 */
+    @Excel(name = "职务")
+    @ApiModelProperty(value = "职务")
+    private String position;
+
+    /** 性别 */
+    @Excel(name = "性别")
+    @ApiModelProperty(value = "性别")
+    private String gender;
+
+    /** 联系电话 */
+    @Excel(name = "联系电话")
+    @ApiModelProperty(value = "联系电话")
+    private String phone;
+
+    /** 联系方式 */
+    @Excel(name = "联系方式")
+    @ApiModelProperty(value = "联系方式")
+    private String contactType;
+
+    /** email */
+    @Excel(name = "email")
+    @ApiModelProperty(value = "email")
+    private String email;
+
+    /** 排序 */
+    @Excel(name = "排序")
+    @ApiModelProperty(value = "排序")
+    private Long sort;
+
+    /** 是否为主要联系人,否/是 */
+    @Excel(name = "是否为主要联系人,否/是")
+    @ApiModelProperty(value = "是否为主要联系人,否/是")
+    private String isMain;
+
+    /** 主程序账套外键 */
+    @ApiModelProperty(value = "是否为主要联系人,否/是")
+    private Long tenantId;
+
+}

+ 30 - 0
src/main/java/cn/ezhizao/project/business/companyContactor/mapper/BizCompanyContactorMapper.java

@@ -0,0 +1,30 @@
+package cn.ezhizao.project.business.companyContactor.mapper;
+
+import cn.ezhizao.project.business.companyContactor.domain.BizCompanyContactor;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+import java.util.List;
+
+/**
+ * 客户联系人Mapper接口
+ *
+ * @author ruoyi
+ * @date 2023-10-17
+ */
+public interface BizCompanyContactorMapper extends BaseMapper<BizCompanyContactor>
+{
+    /**
+     * 查询客户联系人列表
+     *
+     * @param bizCompanyContactor 客户联系人
+     * @return 客户联系人集合
+     */
+    public List<BizCompanyContactor> getList(BizCompanyContactor bizCompanyContactor);
+
+    /**
+     * 物理删除
+     * @param bizCompanyContactor
+     * @return 删除结果
+    */
+    public int physicalDelete(BizCompanyContactor bizCompanyContactor);
+}

+ 31 - 0
src/main/java/cn/ezhizao/project/business/companyContactor/service/IBizCompanyContactorService.java

@@ -0,0 +1,31 @@
+package cn.ezhizao.project.business.companyContactor.service;
+
+import cn.ezhizao.project.business.companyContactor.domain.BizCompanyContactor;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+/**
+ * 客户联系人Service接口
+ *
+ * @author ruoyi
+ * @date 2023-10-17
+ */
+public interface IBizCompanyContactorService extends IService<BizCompanyContactor>
+{
+    /**
+     * 查询客户联系人列表
+     *
+     * @param bizCompanyContactor 客户联系人
+     * @return 客户联系人集合
+     */
+    public List<BizCompanyContactor> getList(BizCompanyContactor bizCompanyContactor);
+
+    /**
+     * 物理删除
+     * @param bizCompanyContactor
+     * @return 删除结果
+     */
+    public int physicalDelete(BizCompanyContactor bizCompanyContactor);
+
+}

+ 44 - 0
src/main/java/cn/ezhizao/project/business/companyContactor/service/impl/BizCompanyContactorServiceImpl.java

@@ -0,0 +1,44 @@
+package cn.ezhizao.project.business.companyContactor.service.impl;
+
+import cn.ezhizao.project.business.companyContactor.domain.BizCompanyContactor;
+import cn.ezhizao.project.business.companyContactor.mapper.BizCompanyContactorMapper;
+import cn.ezhizao.project.business.companyContactor.service.IBizCompanyContactorService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 客户联系人Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2023-10-17
+ */
+@Service
+public class BizCompanyContactorServiceImpl  extends ServiceImpl<BizCompanyContactorMapper, BizCompanyContactor> implements IBizCompanyContactorService
+{
+    @Resource
+    private BizCompanyContactorMapper bizCompanyContactorMapper;
+
+    /**
+     * 查询客户联系人列表
+     *
+     * @param bizCompanyContactor 客户联系人
+     * @return 客户联系人
+     */
+    @Override
+    public List<BizCompanyContactor> getList(BizCompanyContactor bizCompanyContactor)
+    {
+        return bizCompanyContactorMapper.getList(bizCompanyContactor);
+    }
+
+    /**
+     * 物理删除
+     * @param bizCompanyContactor
+     * @return 删除结果
+     */
+    @Override
+    public int physicalDelete(BizCompanyContactor bizCompanyContactor){ return bizCompanyContactorMapper.physicalDelete(bizCompanyContactor); };
+
+}

+ 102 - 0
src/main/java/cn/ezhizao/project/business/companyFollow/controller/BizCompanyFollowDetailController.java

@@ -0,0 +1,102 @@
+package cn.ezhizao.project.business.companyFollow.controller;
+
+import cn.ezhizao.common.utils.poi.ExcelUtil;
+import cn.ezhizao.framework.aspectj.lang.annotation.Log;
+import cn.ezhizao.framework.aspectj.lang.enums.BusinessType;
+import cn.ezhizao.framework.web.controller.BaseController;
+import cn.ezhizao.framework.web.domain.AjaxResult;
+import cn.ezhizao.framework.web.page.TableDataInfo;
+import cn.ezhizao.project.business.companyFollow.domain.BizCompanyFollowDetail;
+import cn.ezhizao.project.business.companyFollow.service.IBizCompanyFollowDetailService;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 客户跟进记录Controller
+ *
+ * @author ruoyi
+ * @date 2023-10-17
+ */
+@RestController
+@RequestMapping("/business/follow")
+public class BizCompanyFollowDetailController extends BaseController
+{
+    @Resource
+    private IBizCompanyFollowDetailService bizCompanyFollowDetailService;
+
+    /**
+     * 查询客户跟进记录列表
+     */
+    @PreAuthorize("@ss.hasPermi('business:company:info')")
+    @GetMapping("/list")
+    public TableDataInfo list(BizCompanyFollowDetail bizCompanyFollowDetail) throws NoSuchFieldException, IllegalAccessException
+    {
+        setTenantId(bizCompanyFollowDetail);
+        startPage();
+        List<BizCompanyFollowDetail> list = bizCompanyFollowDetailService.getList(bizCompanyFollowDetail);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出客户跟进记录列表
+     */
+    @PreAuthorize("@ss.hasPermi('business:follow:export')")
+    @Log(title = "客户跟进记录", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, BizCompanyFollowDetail bizCompanyFollowDetail) throws NoSuchFieldException, IllegalAccessException
+    {
+        setTenantId(bizCompanyFollowDetail);
+        List<BizCompanyFollowDetail> list = bizCompanyFollowDetailService.getList(bizCompanyFollowDetail);
+        ExcelUtil<BizCompanyFollowDetail> util = new ExcelUtil<BizCompanyFollowDetail>(BizCompanyFollowDetail.class);
+        util.exportExcel(response, list, "客户跟进记录数据");
+    }
+
+    /**
+     * 获取客户跟进记录详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('business:company:info')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(bizCompanyFollowDetailService.getById(id));
+    }
+
+    /**
+     * 新增客户跟进记录
+     */
+    @PreAuthorize("@ss.hasPermi('business:company:follow')")
+    @Log(title = "客户跟进记录", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody BizCompanyFollowDetail bizCompanyFollowDetail) throws NoSuchFieldException, IllegalAccessException
+    {
+        setTenantId(bizCompanyFollowDetail);
+        return toAjax(bizCompanyFollowDetailService.save(bizCompanyFollowDetail));
+    }
+
+    /**
+     * 修改客户跟进记录
+     */
+    @PreAuthorize("@ss.hasPermi('business:company:follow')")
+    @Log(title = "客户跟进记录", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody BizCompanyFollowDetail bizCompanyFollowDetail) throws NoSuchFieldException, IllegalAccessException
+    {
+        setTenantId(bizCompanyFollowDetail);
+        return toAjax(bizCompanyFollowDetailService.updateById(bizCompanyFollowDetail));
+    }
+
+    /**
+     * 删除客户跟进记录
+     */
+    @PreAuthorize("@ss.hasPermi('business:company:follow:remove')")
+    @Log(title = "客户跟进记录", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable List<Long> ids)
+    {
+        return toAjax(bizCompanyFollowDetailService.removeBatchByIds(ids));
+    }
+}

+ 76 - 0
src/main/java/cn/ezhizao/project/business/companyFollow/domain/BizCompanyFollowDetail.java

@@ -0,0 +1,76 @@
+package cn.ezhizao.project.business.companyFollow.domain;
+
+import cn.ezhizao.framework.aspectj.lang.annotation.Excel;
+import cn.ezhizao.framework.web.domain.BaseEntity;
+import cn.ezhizao.project.system.domain.SysFileStorage;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 客户跟进记录对象 biz_company_follow_detail
+ *
+ * @author ruoyi
+ * @date 2023-10-17
+ */
+@Data
+@TableName(value = "biz_company_follow_detail")
+public class BizCompanyFollowDetail extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 客户外键 */
+    @ApiModelProperty(value = "${comment}")
+    private Long companyId;
+
+    /** 跟进方式,对应数据字典id */
+    @ApiModelProperty(value = "${comment}")
+    private Long followTypeId;
+
+
+    @ApiModelProperty("跟进方式")
+    @TableField(exist = false)
+    private String followMode;
+
+    /** 跟进类型,对应数据字典id */
+    @ApiModelProperty(value = "${comment}")
+    private Long followCategoryId;
+
+
+    @ApiModelProperty("跟进类型")
+    @TableField(exist = false)
+    private String followCategory;
+
+    /** 跟进时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "跟进时间", width = 30, dateFormat = "yyyy-MM-dd")
+    @ApiModelProperty(value = "跟进时间")
+    private Date followDate;
+
+    /** 下次跟进时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "下次跟进时间", width = 30, dateFormat = "yyyy-MM-dd")
+    @ApiModelProperty(value = "下次跟进时间")
+    private Date nextFollowDate;
+
+    /** 跟进内容 */
+    @Excel(name = "跟进内容")
+    @ApiModelProperty(value = "跟进内容")
+    private String content;
+
+    /** 主程序账套外键 */
+    @ApiModelProperty(value = "跟进内容")
+    private Long tenantId;
+
+    @TableField(exist = false)
+    private boolean asc;
+
+    @TableField(exist = false)
+    private List<SysFileStorage> files;
+
+}

+ 30 - 0
src/main/java/cn/ezhizao/project/business/companyFollow/mapper/BizCompanyFollowDetailMapper.java

@@ -0,0 +1,30 @@
+package cn.ezhizao.project.business.companyFollow.mapper;
+
+import cn.ezhizao.project.business.companyFollow.domain.BizCompanyFollowDetail;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+import java.util.List;
+
+/**
+ * 客户跟进记录Mapper接口
+ *
+ * @author ruoyi
+ * @date 2023-10-17
+ */
+public interface BizCompanyFollowDetailMapper extends BaseMapper<BizCompanyFollowDetail>
+{
+    /**
+     * 查询客户跟进记录列表
+     *
+     * @param bizCompanyFollowDetail 客户跟进记录
+     * @return 客户跟进记录集合
+     */
+    public List<BizCompanyFollowDetail> getList(BizCompanyFollowDetail bizCompanyFollowDetail);
+
+    /**
+     * 物理删除
+     * @param bizCompanyFollowDetail
+     * @return 删除结果
+    */
+    public int physicalDelete(BizCompanyFollowDetail bizCompanyFollowDetail);
+}

+ 31 - 0
src/main/java/cn/ezhizao/project/business/companyFollow/service/IBizCompanyFollowDetailService.java

@@ -0,0 +1,31 @@
+package cn.ezhizao.project.business.companyFollow.service;
+
+import cn.ezhizao.project.business.companyFollow.domain.BizCompanyFollowDetail;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+/**
+ * 客户跟进记录Service接口
+ *
+ * @author ruoyi
+ * @date 2023-10-17
+ */
+public interface IBizCompanyFollowDetailService extends IService<BizCompanyFollowDetail>
+{
+    /**
+     * 查询客户跟进记录列表
+     *
+     * @param bizCompanyFollowDetail 客户跟进记录
+     * @return 客户跟进记录集合
+     */
+    public List<BizCompanyFollowDetail> getList(BizCompanyFollowDetail bizCompanyFollowDetail);
+
+    /**
+     * 物理删除
+     * @param bizCompanyFollowDetail
+     * @return 删除结果
+     */
+    public int physicalDelete(BizCompanyFollowDetail bizCompanyFollowDetail);
+
+}

+ 58 - 0
src/main/java/cn/ezhizao/project/business/companyFollow/service/impl/BizCompanyFollowDetailServiceImpl.java

@@ -0,0 +1,58 @@
+package cn.ezhizao.project.business.companyFollow.service.impl;
+
+import cn.ezhizao.project.business.companyFollow.domain.BizCompanyFollowDetail;
+import cn.ezhizao.project.business.companyFollow.mapper.BizCompanyFollowDetailMapper;
+import cn.ezhizao.project.business.companyFollow.service.IBizCompanyFollowDetailService;
+import cn.ezhizao.project.system.service.ISysFileStorageService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 客户跟进记录Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2023-10-17
+ */
+@Service
+public class BizCompanyFollowDetailServiceImpl  extends ServiceImpl<BizCompanyFollowDetailMapper, BizCompanyFollowDetail> implements IBizCompanyFollowDetailService
+{
+    @Resource
+    private BizCompanyFollowDetailMapper bizCompanyFollowDetailMapper;
+    @Resource
+    private ISysFileStorageService sysFileStorageService;
+
+    /**
+     * 查询客户跟进记录列表
+     *
+     * @param bizCompanyFollowDetail 客户跟进记录
+     * @return 客户跟进记录
+     */
+    @Override
+    public List<BizCompanyFollowDetail> getList(BizCompanyFollowDetail bizCompanyFollowDetail)
+    {
+        return bizCompanyFollowDetailMapper.getList(bizCompanyFollowDetail);
+    }
+
+    /**
+     * 物理删除
+     * @param bizCompanyFollowDetail
+     * @return 删除结果
+     */
+    @Override
+    public int physicalDelete(BizCompanyFollowDetail bizCompanyFollowDetail){ return bizCompanyFollowDetailMapper.physicalDelete(bizCompanyFollowDetail); };
+
+    @Override
+    public boolean save(BizCompanyFollowDetail bizCompanyFollowDetail) {
+        boolean state = super.save(bizCompanyFollowDetail);
+        bizCompanyFollowDetail.getFiles().forEach(l -> {
+            l.setMasterId(bizCompanyFollowDetail.getId());
+            l.setMasterTableName("biz_company_follow_detail");
+        });
+        sysFileStorageService.saveBatch(bizCompanyFollowDetail.getFiles());
+        return state;
+    }
+
+}

+ 41 - 36
src/main/java/cn/ezhizao/project/business/deduct/controller/BizDeductController.java

@@ -3,6 +3,7 @@ package cn.ezhizao.project.business.deduct.controller;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 import java.util.stream.Collectors;
 import javax.annotation.Resource;
@@ -124,7 +125,27 @@ public class BizDeductController extends BaseController {
     @PostMapping("/export")
     public void export(HttpServletResponse response, BizDeduct bizDeduct) throws NoSuchFieldException, IllegalAccessException {
         setTenantId(bizDeduct);
+        startPage();
+        startOrderBy();
         List<BizDeduct> list = bizDeductService.getList(bizDeduct);
+        list.forEach(item -> {
+            item.setContactMsg(item.getYear()+"年"+item.getMonth()+"月");
+            switch (item.getStatus()){
+                case 0:
+                    item.setStatusName("已提交");
+                    break;
+                case 1:
+                    item.setStatusName("已确认");
+                    break;
+                case 2:
+                    item.setStatusName("已扣款");
+                    break;
+                case 4:
+                    item.setStatusName("已驳回");
+                    break;
+            }
+
+        });
         ExcelUtil<BizDeduct> util = new ExcelUtil<BizDeduct>(BizDeduct.class);
         util.exportExcel(response, list, "扣款记录数据");
     }
@@ -140,6 +161,9 @@ public class BizDeductController extends BaseController {
         BizDeduct deduct = bizDeductService.getList(conditions).stream().findFirst().orElse(null);
         if (deduct != null) {
             BizEntrustOrder order = bizEntrustOrderService.getById(deduct.getEntrustOrderId());
+            if(order==null){
+                return error("未查到该委托单号,请检查是否存在,或联系管理员。");
+            }
             deduct.setEntrustOrderStatus(order.getStatus());
             BizStatementAccount statementAccountCondition = new BizStatementAccount();
             statementAccountCondition.setDeductId(id);
@@ -200,27 +224,20 @@ public class BizDeductController extends BaseController {
         BizEntrust entrustLoopCondition = new BizEntrust();
         entrustLoopCondition.setToTenantId(bizEntrustOrder.getTenantId());
         entrustLoopCondition.setFromTenantId(bizEntrustOrder.getFromTenantId());
-//        entrustLoopCondition.setWorkMonth(DateTime.of(conditions.getCurrentDate()).toSqlDate());
         entrustLoopCondition.setWorkMonthFrom(DateTime.of(conditions.getStartMonth()).toSqlDate());
         entrustLoopCondition.setWorkMonthTo(DateTime.of(conditions.getEndMonth()).toSqlDate());
         entrustLoopCondition.setType(1);
         List<BizEntrust> loopEntrust = entrustService.getList(entrustLoopCondition);
         List<BizStatementAccountLoop> loops = new ArrayList<>();
         BizFinancialKeepAccountDetail keepAccountCondition = new BizFinancialKeepAccountDetail();
-//        keepAccountCondition.setYear(DateTime.of(bizDeduct.getCurrentDate()).offset(DateField.MONTH, -1).toString("yyyy"));
-//        keepAccountCondition.setMonth(DateTime.of(bizDeduct.getCurrentDate()).offset(DateField.MONTH, -1).toString("MM"));
         keepAccountCondition.setStartMonth(DateTime.of(conditions.getStartMonth()).toSqlDate());
         keepAccountCondition.setEndMonth(DateTime.of(conditions.getEndMonth()).toSqlDate());
         List<BizFinancialKeepAccountDetail> keepAccountDetails = keepAccountDetailService.getList(keepAccountCondition);
         BizHousingFundConfirmDetail housingFundCondition = new BizHousingFundConfirmDetail();
-//        housingFundCondition.setYear(DateTime.of(bizDeduct.getCurrentDate()).toString("yyyy"));
-//        housingFundCondition.setMonth(DateTime.of(bizDeduct.getCurrentDate()).toString("MM"));
         housingFundCondition.setStartMonth(DateTime.of(conditions.getStartMonth()).toSqlDate());
         housingFundCondition.setEndMonth(DateTime.of(conditions.getEndMonth()).toSqlDate());
         List<BizHousingFundConfirmDetail> housingFundConfirmDetails = bizHousingFundConfirmDetailService.getListByBean(housingFundCondition);
         BizSocialSecurityConfirmDetail socialSecurityConditions = new BizSocialSecurityConfirmDetail();
-//        socialSecurityConditions.setYear(DateTime.of(bizDeduct.getCurrentDate()).toString("yyyy"));
-//        socialSecurityConditions.setMonth(DateTime.of(bizDeduct.getCurrentDate()).toString("MM"));
         socialSecurityConditions.setStartMonth(DateTime.of(conditions.getStartMonth()).toSqlDate());
         socialSecurityConditions.setEndMonth(DateTime.of(conditions.getEndMonth()).toSqlDate());
         List<BizSocialSecurityConfirmDetail> socialSecurityConfirmDetails = bizSocialSecurityConfirmDetailService.getListByBean(socialSecurityConditions);
@@ -264,38 +281,11 @@ public class BizDeductController extends BaseController {
                 loops.add(item);
             });
         });
-//        companies.forEach(l -> {
-//            BizStatementAccountLoop item = new BizStatementAccountLoop();
-//            item.setEntrustOrderId(bizDeduct.getEntrustOrderId());
-//            item.setSocialCreditCode(l.getSocialCreditCode());
-//            item.setCompanyId(l.getId());
-//            item.setCompanyName(l.getName());
-//            item.setProvince(l.getProvince());
-//            item.setCity(l.getCity());
-//            item.setDistrict(l.getDistrict());
-//            BizFinancialKeepAccountDetail keepAccountDetail = keepAccountDetails.stream().filter(v -> v.getCompanyId().equals(l.getId())).findFirst().orElse(null);
-//            item.setCumulativeIncome(keepAccountDetail != null ? keepAccountDetail.getCurrentYearIncome() : null);
-//            item.setQuotaAmount(l.getQuotaAmount());
-//            item.setCollectionMethod(l.getCollectionMethod());
-//            item.setTaxType(l.getTaxType());
-//            item.setIsTax(loopEntrust.stream().anyMatch(v -> v.getCompanyId().equals(l.getId()) && v.getTaskTypeId().equals(1L)) ? 1 : 0);
-//            item.setIsHousingFund(loopEntrust.stream().anyMatch(v -> v.getCompanyId().equals(l.getId()) && v.getTaskTypeId().equals(3L)) ? 1 : 0);
-//            item.setIsSocialSecurity(loopEntrust.stream().anyMatch(v -> v.getCompanyId().equals(l.getId()) && v.getTaskTypeId().equals(2L)) ? 1 : 0);
-//            item.setActuallyAnnualIncome(getAnnualIncome(keepAccountDetail != null ? keepAccountDetail.getCurrentYearIncome() : null));
-//            BizSocialSecurityConfirmDetail socialSecurityConfirmDetail = socialSecurityConfirmDetails.stream().filter(v -> v.getCompanyId().equals(item.getCompanyId())).findFirst().orElse(null);
-//            item.setChangedSocialSecurity(socialSecurityConfirmDetail == null ? 0 : socialSecurityConfirmDetail.getIsChanged());
-//
-//            BizHousingFundConfirmDetail housingFundConfirmDetail = housingFundConfirmDetails.stream().filter(v -> v.getCompanyId().equals(item.getCompanyId())).findFirst().orElse(null);
-//            item.setChangedHousingFund(housingFundConfirmDetail == null ? 0 : housingFundConfirmDetail.getIsChanged());
-//            item.setAnnualIncome(l.getAnnualIncome());
-//            loops.add(item);
-//        });
 
         // 获取单次从表
         BizEntrust entrustOnceCondition = new BizEntrust();
         entrustOnceCondition.setToTenantId(bizEntrustOrder.getTenantId());
         entrustOnceCondition.setFromTenantId(bizEntrustOrder.getFromTenantId());
-//        entrustOnceCondition.setWorkMonth(DateTime.of(conditions.getCurrentDate()).toSqlDate());
         entrustOnceCondition.setType(2);
         List<BizEntrust> onceEntrust = entrustService.getList(entrustOnceCondition);
         List<BizStatementAccountOnce> onceList = new ArrayList<>();
@@ -665,13 +655,25 @@ public class BizDeductController extends BaseController {
     @Transactional(rollbackFor = Exception.class)
     @PostMapping("/confirm")
     public AjaxResult confirmDeduct(@RequestBody BizDeduct bizDeduct) throws NoSuchFieldException, IllegalAccessException {
-        bizDeduct.setStatus(1);
-        boolean status = bizDeductService.updateById(bizDeduct);
+
         // 扣款
         List<BizDeposit> deposits = depositService.query().eq("entrust_order_id", bizDeduct.getEntrustOrderId()).ge("remain_amount", 0).eq("status", 1).orderByAsc("verify_date", "type").list();
         BigDecimal amount = bizDeduct.getAmount();
         int index = 0;
         while (amount.compareTo(BigDecimal.ZERO) > 0) {
+            if(deposits.isEmpty()){
+                return error("扣款失败,余额不足。");
+            }
+            BigDecimal money = new BigDecimal(0);
+
+            for (BizDeposit d : deposits) {
+                money = money.add(d.getRemainAmount());
+            }
+            if(money.compareTo(amount)<0){
+                return error("扣款失败,余额不足。");
+            }
+
+
             if (deposits.get(index).getRemainAmount().compareTo(amount) > 0) {
                 BigDecimal remain = deposits.get(index).getRemainAmount().subtract(amount).setScale(2, RoundingMode.HALF_UP);
                 amount = BigDecimal.ZERO;
@@ -682,6 +684,9 @@ public class BizDeductController extends BaseController {
             }
             index++;
         }
+        bizDeduct.setStatus(2);
+        bizDeduct.setDeductDate(new Date());
+        boolean status = bizDeductService.updateById(bizDeduct);
         depositService.updateBatchById(deposits);
         return toAjax(status);
     }

+ 16 - 6
src/main/java/cn/ezhizao/project/business/deduct/domain/BizDeduct.java

@@ -41,11 +41,20 @@ public class BizDeduct extends BaseEntity
     @ApiModelProperty(value = "${comment}")
     private Long entrustOrderId;
 
+    @Excel(name = "委托单号")
     @TableField(exist = false)
     private String formNo;
 
+    @Excel(name = "扣款单位")
+    @TableField(exist = false)
+    private String contactCompany;
+
+    @Excel(name = "扣款信息")
+    @TableField(exist = false)
+    private String contactMsg;
+
     /** 描述 */
-    @Excel(name = "描述")
+
     @ApiModelProperty(value = "描述")
     private String description;
 
@@ -67,17 +76,18 @@ public class BizDeduct extends BaseEntity
     private BigDecimal remainAmount;
 
     /** 状态 0已提交 1已确认 2已扣款 4已驳回 */
-    @Excel(name = "状态 0已提交 1已确认 2已扣款 4已驳回")
     @ApiModelProperty(value = "状态 0已提交 1已确认 2已扣款 4已驳回")
     private Integer status;
 
+    @Excel(name = "状态")
+    @TableField(exist = false)
+    private String statusName;
+
     @TableField(exist = false)
     @ApiModelProperty("签约主体")
     private String signingSubject;
 
-    @TableField(exist = false)
-    @ApiModelProperty("往来单位")
-    private String contactCompany;
+
 
     @ApiModelProperty("年")
     private String year;
@@ -85,7 +95,7 @@ public class BizDeduct extends BaseEntity
     private String month;
 
     @JsonFormat(pattern = "yyyy-MM-dd")
-    @Excel(name = "对账日期", width = 30, dateFormat = "yyyy-MM-dd")
+    @Excel(name = "对账日期", width = 20, dateFormat = "yyyy-MM-dd")
     @ApiModelProperty("对账日期")
     private Date statementDate;
 

+ 13 - 0
src/main/java/cn/ezhizao/project/business/deposit/controller/BizDepositController.java

@@ -88,6 +88,19 @@ public class BizDepositController extends BaseController
     {
         setTenantId(bizDeposit);
         List<BizDeposit> list = bizDepositService.getList(bizDeposit);
+        list.forEach(l -> {
+            switch (l.getStatus()) {
+                case 0:
+                    l.setStatusTyp("未审核");
+                    break;
+                case 1:
+                    l.setStatusTyp("已审核");
+                    break;
+                case 2:
+                    l.setStatusTyp("不通过");
+                    break;
+            }
+        });
         ExcelUtil<BizDeposit> util = new ExcelUtil<BizDeposit>(BizDeposit.class);
         util.exportExcel(response, list, "存款数据");
     }

+ 31 - 18
src/main/java/cn/ezhizao/project/business/deposit/domain/BizDeposit.java

@@ -37,43 +37,60 @@ public class BizDeposit extends BaseEntity
     @ApiModelProperty(value = "${comment}")
     private Long entrustOrderId;
 
+
+
+    /** 日期 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "存款日期", width = 20, dateFormat = "yyyy-MM-dd")
+    @ApiModelProperty(value = "存款日期")
+    private Date depositDate;
+
+
+    @Excel(name = "委托单号")
     @TableField(exist = false)
     private String formNo;
 
+    @Excel(name = "预存单位")
+    @TableField(exist = false)
+    private String contactCompany;
+
+    @Excel(name = "签约主体")
+    @TableField(exist = false)
+    private String signingSubject;
+
     /** 存款金额 */
-    @Excel(name = "存款金额")
+    @Excel(name = "金额")
     @ApiModelProperty(value = "存款金额")
     private BigDecimal amount;
 
     /** 余额 */
-    @Excel(name = "余额")
+//    @Excel(name = "余额")
     @ApiModelProperty(value = "余额")
     private BigDecimal remainAmount;
 
     /** 存款类型 1默认 2赠送 */
-    @Excel(name = "存款类型 1默认 2赠送")
+//    @Excel(name = "存款类型 1默认 2赠送")
     @ApiModelProperty(value = "存款类型 1默认 2赠送")
     private Integer type;
 
-    /** 存款日期 */
-    @JsonFormat(pattern = "yyyy-MM-dd")
-    @Excel(name = "存款日期", width = 30, dateFormat = "yyyy-MM-dd")
-    @ApiModelProperty(value = "存款日期")
-    private Date depositDate;
-
     /** 审核状态 0 未审核 1审核通过 2审核不通过 */
-    @Excel(name = "审核状态 0 未审核 1审核通过 2审核不通过")
+//    @Excel(name = "审核状态 0 未审核 1审核通过 2审核不通过")
     @ApiModelProperty(value = "审核状态 0 未审核 1审核通过 2审核不通过")
     private Integer status;
 
+    /** 审核状态 0 未审核 1审核通过 2审核不通过 */
+    @Excel(name = "审核状态")
+    @TableField(exist = false)
+    private String statusTyp;
+
     /** 审核时间 */
     @JsonFormat(pattern = "yyyy-MM-dd")
-    @Excel(name = "审核时间", width = 30, dateFormat = "yyyy-MM-dd")
+//    @Excel(name = "审核时间", width = 30, dateFormat = "yyyy-MM-dd")
     @ApiModelProperty(value = "审核时间")
     private Date verifyDate;
 
     /** 审核提醒 */
-    @Excel(name = "审核提醒")
+//    @Excel(name = "审核提醒")
     @ApiModelProperty(value = "审核提醒")
     private String verifyRemark;
 
@@ -84,13 +101,9 @@ public class BizDeposit extends BaseEntity
     @TableField(exist = false)
     private List<SysFileStorage> files;
 
-    @TableField(exist = false)
-    @ApiModelProperty("签约主体")
-    private String signingSubject;
 
-    @TableField(exist = false)
-    @ApiModelProperty("往来单位")
-    private String contactCompany;
+
+
 
     @TableField(exist = false)
     private BigDecimal freeAmount;

+ 1 - 0
src/main/java/cn/ezhizao/project/business/entrust/domain/BizEntrust.java

@@ -70,6 +70,7 @@ public class BizEntrust extends BaseEntity
     private Integer type;
 
     @TableField(exist = false)
+    @Excel(name = "公司名称")
     private String companyName;
 
     @TableField(exist = false)

+ 15 - 0
src/main/java/cn/ezhizao/project/business/entrustOrder/controller/BizEntrustOrderController.java

@@ -87,7 +87,21 @@ public class BizEntrustOrderController extends BaseController {
     @PostMapping("/export")
     public void export(HttpServletResponse response, BizEntrustOrder bizEntrustOrder) throws NoSuchFieldException, IllegalAccessException {
         setTenantId(bizEntrustOrder);
+        startOrderBy();
         List<BizEntrustOrder> list = bizEntrustOrderService.getList(bizEntrustOrder);
+        list.forEach(l->{
+            switch (l.getStatus()) {
+                case 0:
+                    l.setStatusTyp("未签订");
+                    break;
+                case 1:
+                    l.setStatusTyp("进行中");
+                    break;
+                case 2:
+                    l.setStatusTyp("已完成");
+                    break;
+            }
+        });
         ExcelUtil<BizEntrustOrder> util = new ExcelUtil<BizEntrustOrder>(BizEntrustOrder.class);
         util.exportExcel(response, list, "委托签约合同数据");
     }
@@ -114,6 +128,7 @@ public class BizEntrustOrderController extends BaseController {
         /* 校验是否存在同家公司未完结的合同*/
         //空对象
         BizEntrustOrder order = new BizEntrustOrder();
+        setTenantId(order);
         //往来单位赋值
         order.setFromTenantId(bizEntrustOrder.getFromTenantId());
         //查询是否存在相同的往来单位

+ 25 - 14
src/main/java/cn/ezhizao/project/business/entrustOrder/domain/BizEntrustOrder.java

@@ -32,33 +32,44 @@ public class BizEntrustOrder extends BaseEntity
     @ApiModelProperty(value = "${comment}")
     private Long tenantId;
 
-    /** 合同号 */
-    @Excel(name = "合同号")
-    @ApiModelProperty(value = "合同号")
-    private String formNo;
+    @Excel(name = "签约主体")
+    @TableField(exist = false)
+    private String signingSubject;
 
     /** 签约日期 */
     @JsonFormat(pattern = "yyyy-MM-dd")
-    @Excel(name = "签约日期", width = 30, dateFormat = "yyyy-MM-dd")
+    @Excel(name = "签约日期", width = 20, dateFormat = "yyyy-MM-dd")
     @ApiModelProperty(value = "签约日期")
     private Date formDate;
 
-    /** 状态 0 未签订 1 进行中 2 已完成 */
-    @Excel(name = "状态 0 未签订 1 进行中 2 已完成")
-    @ApiModelProperty(value = "状态 0 未签订 1 进行中 2 已完成")
-    private Integer status;
-
-    @TableField(exist = false)
-    @ApiModelProperty("签约主体")
-    private String signingSubject;
+    /** 合同号 */
+    @Excel(name = "合同编号")
+    @ApiModelProperty(value = "合同号")
+    private String formNo;
 
+    @Excel(name = "往来单位")
     @TableField(exist = false)
-    @ApiModelProperty("往来单位")
     private String contactCompany;
 
+    @Excel(name = "预存金额")
     @TableField(exist = false)
     private BigDecimal depositAmount;
+
+    @Excel(name = "结余金额")
     @TableField(exist = false)
     private BigDecimal remainAmount;
 
+    /** 状态 0 未签订 1 进行中 2 已完成 */
+//    @Excel(name = "状态 0 未签订 1 进行中 2 已完成")
+    @ApiModelProperty(value = "状态 0 未签订 1 进行中 2 已完成")
+    private Integer status;
+
+    @Excel(name = "状态")
+    @TableField(exist = false)
+    private String statusTyp;
+
+
+
+
+
 }

+ 242 - 0
src/main/java/cn/ezhizao/project/business/order/domain/BizArchiveInput.java

@@ -0,0 +1,242 @@
+package cn.ezhizao.project.business.order.domain;
+
+import cn.ezhizao.framework.aspectj.lang.annotation.Excel;
+import cn.ezhizao.framework.web.domain.BaseEntity;
+import cn.ezhizao.project.system.domain.SysFileStorage;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 档案入库对象 biz_archive_input
+ *
+ * @author ruoyi
+ * @date 2023-10-16
+ */
+@Data
+@TableName(value = "biz_archive_input")
+public class BizArchiveInput extends BaseEntity {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 档案编码
+     */
+    @Excel(name = "档案编码")
+    @ApiModelProperty(value = "档案编码")
+    private String archiveCode;
+
+    /**
+     * 客户外键
+     */
+    @ApiModelProperty(value = "档案编码")
+    private Long companyId;
+
+    @ApiModelProperty("变更来源外键")
+    private Long fromId;
+
+    @TableField(exist = false)
+    @Excel(name = "客户名称", sort = 1)
+    private String companyName;
+
+    @TableField(exist = false)
+    @ApiModelProperty("税号")
+    @Excel(name = "税号", sort = 2)
+    private String socialCreditCode;
+
+    @ApiModelProperty("签单人")
+    private Long signerId;
+
+    @TableField(exist = false)
+    @ApiModelProperty("签单人")
+    @Excel(name = "签单人")
+    private String signerName;
+
+    /**
+     * 档案类型id
+     */
+    @ApiModelProperty(value = "档案编码")
+    private Long archiveTypeId;
+
+    /**
+     * 开始月
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "开始月", width = 30, dateFormat = "yyyy-MM-dd")
+    @ApiModelProperty(value = "开始月")
+    private Date startMonth;
+
+    /**
+     * 结束月
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "结束月", width = 30, dateFormat = "yyyy-MM-dd")
+    @ApiModelProperty(value = "结束月")
+    private Date endMonth;
+
+    /**
+     * 库位外键
+     */
+    @ApiModelProperty(value = "结束月")
+    private Long locationId;
+
+    /**
+     * 入库人外键
+     */
+    @ApiModelProperty(value = "结束月")
+    private Long inputEmployeeId;
+
+    /**
+     * 凭证图片路径
+     */
+    @Excel(name = "凭证图片路径")
+    @ApiModelProperty(value = "凭证图片路径")
+    private String proofUrl;
+
+    @ApiModelProperty("变更类型")
+    @TableField(exist = false)
+    private String alterType;
+    /**
+     * 合同编号
+     */
+    @Excel(name = "合同编号")
+    @ApiModelProperty(value = "合同编号")
+    private String contractNo;
+
+    /**
+     * 签约日期
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "签约日期", width = 30, dateFormat = "yyyy-MM-dd")
+    @ApiModelProperty(value = "签约日期")
+    private Date formDate;
+
+    /**
+     * 签约金额
+     */
+    @Excel(name = "签约金额")
+    @ApiModelProperty(value = "签约金额")
+    private BigDecimal amount;
+
+    /**
+     * 优惠金额
+     **/
+    @Excel(name = "优惠金额")
+    @ApiModelProperty("优惠金额")
+    private BigDecimal discountAmount;
+
+    /**
+     * 优惠金额
+     **/
+    @Excel(name = "实付金额")
+    @ApiModelProperty("实付金额")
+    private BigDecimal trueAmount;
+
+    /**
+     * 合同审核状态
+     */
+    @Excel(name = "合同审核状态")
+    @ApiModelProperty(value = "合同审核状态")
+    private Integer verifyStatus;
+
+    /**
+     * 合同类型
+     */
+    @Excel(name = "合同类型", readConverterExp = "0=新签,1=续签")
+    @ApiModelProperty(value = "合同类型")
+    private Integer contractType;
+
+    @Excel(name = "任务类型", readConverterExp = "1=循环,2=单次")
+    @ApiModelProperty("任务类型")
+    private Integer serviceType;
+
+    /**
+     * 证照类型
+     */
+    @ApiModelProperty(value = "证照类型")
+    private Long certificateTypeId;
+
+    /**
+     * 出库时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "出库时间", width = 30, dateFormat = "yyyy-MM-dd")
+    @ApiModelProperty(value = "出库时间")
+    private Date outputDate;
+
+    /**
+     * 主程序账套外键
+     */
+    @ApiModelProperty(value = "出库时间")
+    private Long tenantId;
+
+    /**
+     * 月数
+     */
+    @Excel(name = "月数")
+    @ApiModelProperty(value = "月数")
+    private Long monthNum;
+
+    /**
+     * 审核备注
+     */
+    @Excel(name = "审核备注")
+    @ApiModelProperty(value = "审核备注")
+    private String verifyRemark;
+
+    @TableField(exist = false)
+    private List<BizArchiveInputDetail> details;
+
+    @ApiModelProperty("来源类型外键")
+    private Long sourceCategoryId;
+
+    @TableField(exist = false)
+    private String sourceCategoryName;
+
+    @TableField(exist = false)
+    private String sourceName;
+    @TableField(exist = false)
+    private String referrerDataSource;
+
+    @ApiModelProperty("来源外键")
+    private Long sourceId;
+
+
+    @ApiModelProperty("状态")
+    private Integer status;
+
+    @TableField(exist = false)
+    private List<SysFileStorage> files;
+
+    @ApiModelProperty("解除合同状态")
+    private Integer dissolution;
+
+    @ApiModelProperty("变更次数")
+    @TableField(exist = false)
+    private Integer alterNumber;
+
+    @TableField(exist = false)
+    private Integer isKeepAccount;
+    @TableField(exist = false)
+    private Integer isSocialSecurity;
+    @TableField(exist = false)
+    private Integer isHousingFund;
+    @TableField(exist = false)
+    private Integer isReturnTax;
+
+    @TableField(exist = false)
+    private Integer isRegister;
+    @TableField(exist = false)
+    private Integer isAlter;
+    @TableField(exist = false)
+    private Integer isLogout;
+    @TableField(exist = false)
+    private Integer isQualified;
+    @TableField(exist = false)
+    private Integer isOther;
+}

+ 56 - 0
src/main/java/cn/ezhizao/project/business/order/domain/BizArchiveInputController.20231212.md

@@ -0,0 +1,56 @@
+@Log(title = "合同模板导出", businessType = BusinessType.EXPORT)
+@PreAuthorize("@ss.hasPermi('business:archive:order:export')")
+@PostMapping("/exportOnceTemplate")
+public void exportOnceTemplate(HttpServletResponse response) throws Exception {
+//        org.springframework.core.io.Resource resource = resourceLoader.getResource("classpath:importTemplate/OnceOrderExcelTemplate.xlsx");
+//        File file = null;
+//        try {
+//            file = resource.getFile();
+//        } catch (IOException e) {
+//            e.printStackTrace();
+//        }
+//        ExcelWriter writer = cn.hutool.poi.excel.ExcelUtil.getBigWriter(file);
+//        response.setContentType("application/vnd.ms-excel;charset=utf-8");
+//        //test.xls是弹出下载对话框的文件名,不能为中文,中文请自行编码
+//        response.setHeader("Content-Disposition", "attachment;filename=test.xlsx");
+//        ServletOutputStream out = null;
+//        try {
+//            out = response.getOutputStream();
+//        } catch (IOException e) {
+//            e.printStackTrace();
+//        }
+//        writer.flush(out, true);
+//        // 关闭writer,释放内存
+//        writer.close();
+//        //此处记得关闭输出Servlet流
+//        IoUtil.close(out);
+}
+
+
+@Log(title = "合同模板导出", businessType = BusinessType.EXPORT)
+@PreAuthorize("@ss.hasPermi('business:archive:order:export')")
+@PostMapping("/exportLoopTemplate")
+public void exportLoopTemplate(HttpServletResponse response) throws Exception {
+//        org.springframework.core.io.Resource resource = resourceLoader.getResource("classpath:importTemplate/LoopOrderExcelTemplate.xlsx");
+//        File file = null;
+//        try {
+//            file = resource.getFile();
+//        } catch (IOException e) {
+//            e.printStackTrace();
+//        }
+//        ExcelWriter writer = cn.hutool.poi.excel.ExcelUtil.getBigWriter(file);
+//        response.setContentType("application/vnd.ms-excel;charset=utf-8");
+//        //test.xls是弹出下载对话框的文件名,不能为中文,中文请自行编码
+//        response.setHeader("Content-Disposition", "attachment;filename=test.xlsx");
+//        ServletOutputStream out = null;
+//        try {
+//            out = response.getOutputStream();
+//        } catch (IOException e) {
+//            e.printStackTrace();
+//        }
+//        writer.flush(out, true);
+//        // 关闭writer,释放内存
+//        writer.close();
+//        //此处记得关闭输出Servlet流
+//        IoUtil.close(out);
+}

+ 130 - 0
src/main/java/cn/ezhizao/project/business/order/domain/BizArchiveInputDetail.java

@@ -0,0 +1,130 @@
+package cn.ezhizao.project.business.order.domain;
+
+import cn.ezhizao.framework.aspectj.lang.annotation.Excel;
+import cn.ezhizao.framework.web.domain.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 合同明细对象 biz_archive_input_detail
+ *
+ * @author ruoyi
+ * @date 2023-10-16
+ */
+@Data
+@TableName(value = "biz_archive_input_detail")
+public class BizArchiveInputDetail extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 合同外键 */
+    @ApiModelProperty(value = "${comment}")
+    private Long contractId;
+
+    /** 任务类型外键 */
+    @ApiModelProperty(value = "${comment}")
+    private Long taskTypeId;
+
+    @ApiModelProperty("任务名称")
+    @TableField(exist = false)
+    private String taskTypeName;
+
+    @ApiModelProperty(value = "客户外键")
+    private Long companyId;
+
+    /** 月数 */
+//    @Excel(name = "月数")
+//    @ApiModelProperty(value = "月数")
+//    private Integer monthNum;
+
+    /** 单价 */
+    @Excel(name = "单价")
+    @ApiModelProperty(value = "单价")
+    private BigDecimal price;
+
+    /** 总金额 */
+    @Excel(name = "总金额")
+    @ApiModelProperty(value = "总金额")
+    private BigDecimal amount;
+
+    /** 总金额 */
+    @Excel(name = "总金额")
+    @ApiModelProperty(value = "总金额")
+    private BigDecimal addressAmount;
+
+    /** $column.columnComment */
+    @ApiModelProperty(value = "租户外键")
+    private Long tenantId;
+
+    @TableField(exist = false)
+    private List<BizArchiveInputDetailProcess> processes;
+
+    @TableField(exist = false)
+    private Integer payAddress;
+
+    @ApiModelProperty("地址类型")
+    @Excel(name = "地址类型", readConverterExp = "1=自有地址,2=虚拟地址")
+    private Integer addressStyle;
+
+    @ApiModelProperty("地址")
+    private String address;
+
+    @ApiModelProperty("虚拟地址外键")
+    private Long fictionAddressId;
+
+    @Excel(name = "注册省份编码")
+    @ApiModelProperty(value = "注册省份编码")
+    private String provinceCode;
+
+    /** 省 */
+    @Excel(name = "省")
+    @ApiModelProperty(value = "省")
+    private String province;
+
+    /** 注册城市编码 */
+    @Excel(name = "注册城市编码")
+    @ApiModelProperty(value = "注册城市编码")
+    private String cityCode;
+
+    /** 市 */
+    @Excel(name = "市")
+    @ApiModelProperty(value = "市")
+    private String city;
+
+    /** 注册行政区编码 */
+    @Excel(name = "注册行政区编码")
+    @ApiModelProperty(value = "注册行政区编码")
+    private String districtCode;
+
+    /** 区 */
+    @Excel(name = "区")
+    @ApiModelProperty(value = "区")
+    private String district;
+
+
+    @ApiModelProperty("服务月数")
+    @Excel(name = "服务月数")
+    private Integer serviceNum;
+    @ApiModelProperty(name = "赠送月数")
+    @Excel(name = "赠送月数")
+    private Integer freeNum;
+
+    @ApiModelProperty("变更来源外键")
+    private Long fromId;
+
+    @TableField(exist = false)
+    private Boolean redirect;
+    @TableField(exist = false)
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date endMonth;
+
+    @ApiModelProperty("变更类型")
+    private String alterType;
+}

+ 59 - 0
src/main/java/cn/ezhizao/project/business/order/domain/BizArchiveInputDetailProcess.java

@@ -0,0 +1,59 @@
+package cn.ezhizao.project.business.order.domain;
+
+import cn.ezhizao.framework.aspectj.lang.annotation.Excel;
+import cn.ezhizao.framework.web.domain.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 订单流程对象 biz_archive_input_detail_process
+ *
+ * @author ruoyi
+ * @date 2023-11-06
+ */
+@Data
+@TableName(value = "biz_archive_input_detail_process")
+public class BizArchiveInputDetailProcess extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 客户外键 */
+    @ApiModelProperty(value = "${comment}")
+    private Long companyId;
+
+    /** 合同工商任务外键 */
+    @ApiModelProperty(value = "${comment}")
+    private Long contractDetailId;
+
+    /** 合同外键 */
+    @ApiModelProperty(value = "${comment}")
+    private Long contractId;
+
+    /** 任务类型外键 */
+    @ApiModelProperty(value = "${comment}")
+    private Long taskTypeId;
+
+    /** 任务明细类型外键 */
+    @ApiModelProperty(value = "${comment}")
+    private Long taskTypeDetailId;
+
+    @TableField(exist = false)
+    private String taskTypeDetailName;
+
+    /** 价格 */
+    @Excel(name = "价格")
+    @ApiModelProperty(value = "价格")
+    private BigDecimal amount;
+
+    /** 租户外键 */
+    @ApiModelProperty(value = "价格")
+    private Long tenantId;
+
+    @ApiModelProperty("变更来源外键")
+    private Long fromId;
+
+}

+ 122 - 0
src/main/java/cn/ezhizao/project/business/order/domain/OrderExcelImportLoopModel.java

@@ -0,0 +1,122 @@
+package cn.ezhizao.project.business.order.domain;
+
+import cn.ezhizao.framework.aspectj.lang.annotation.Excel;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+public class OrderExcelImportLoopModel {
+    //    合同编号
+    @Excel(name = "合同编号")
+    private String contractNo;
+    //    合同类型
+    @Excel(name = "合同类型")
+    private String orderType;
+    //    客户名称
+    @Excel(name = "客户名称")
+    private String companyName;
+    //    签约日期
+    @Excel(name = "签约日期", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date formDate;
+    //    签单人
+    @Excel(name = "签单人")
+    private String signerName;
+    //    来源类型
+    @Excel(name = "来源类型")
+    private String sourceCategoryName;
+    //    来源
+    @Excel(name = "来源")
+    private String sourceName;
+    //    备注
+    @Excel(name = "备注")
+    private String remark;
+    //    服务金额
+    @Excel(name = "服务金额")
+    private BigDecimal amount;
+    //    优惠金额
+    @Excel(name = "优惠金额")
+    private BigDecimal discountAmount;
+    //    实收金额
+    @Excel(name = "实收金额")
+    private BigDecimal trueAmount;
+
+    // 代理记账
+    @Excel(name = "代理记账")
+    private String keepAccount;
+    // 代理记账单价
+    @Excel(name = "代理记账单价")
+    private BigDecimal keepAccountPrice;
+    // 记账服务月数
+    @Excel(name = "记账服务月数")
+    private Integer keepAccountMonth;
+    // 记账赠送月数
+    @Excel(name = "记账赠送月数")
+    private Integer keepAccountFreeMonth;
+    @Excel(name = "记账开始月")
+    private Date keepAccountStartMonth;
+    @Excel(name ="记账结束月")
+    private Date keepAccountEndMonth;
+    // 记账总金额
+    @Excel(name = "记账总金额")
+    private BigDecimal keepAccountAmount;
+    // 社保代缴
+    @Excel(name = "社保代缴")
+    private String socialSecurity;
+    // 社保单价
+    @Excel(name = "社保单价")
+    private BigDecimal socialSecurityPrice;
+    // 社保服务月数
+    @Excel(name = "社保服务月数")
+    private Integer socialSecurityMonth;
+    // 社保赠送月数
+    @Excel(name = "社保赠送月数")
+    private Integer socialSecurityFreeMonth;
+    @Excel(name = "社保开始月")
+    private Date socialSecurityStartMonth;
+    @Excel(name ="社保结束月")
+    private Date socialSecurityEndMonth;
+    // 社保总金额
+    @Excel(name = "社保总金额")
+    private BigDecimal socialSecurityAmount;
+    // 公积金代缴
+    @Excel(name = "公积金代缴")
+    private String housingFund;
+    // 公积金单价
+    @Excel(name = "公积金单价")
+    private BigDecimal housingFundPrice;
+    // 公积金服务月数
+    @Excel(name = "公积金服务月数")
+    private Integer housingFundMonth;
+    // 公积金赠送月数
+    @Excel(name = "公积金赠送月数")
+    private Integer housingFundFreeMonth;
+    @Excel(name = "公积金开始月")
+    private Date housingFundStartMonth;
+    @Excel(name ="公积金结束月")
+    private Date housingFundEndMonth;
+    // 公积金总金额
+    @Excel(name = "公积金总金额")
+    private BigDecimal housingFundAmount;
+    // 返税申报
+    @Excel(name = "返税申报")
+    private String returnTax;
+    // 返税申报单价
+    @Excel(name = "返税申报单价")
+    private BigDecimal returnTaxPrice;
+    // 返税服务月数
+    @Excel(name = "返税服务月数")
+    private Integer returnTaxMonth;
+    // 返税赠送月数
+    @Excel(name = "返税赠送月数")
+    private Integer returnTaxFreeMonth;
+    @Excel(name = "记账开始月")
+    private Date returnTaxStartMonth;
+    @Excel(name ="记账结束月")
+    private Date returnTaxEndMonth;
+    // 返税总金额
+    @Excel(name= "返税总金额")
+    private BigDecimal returnTaxAmount;
+
+}

+ 240 - 0
src/main/java/cn/ezhizao/project/business/order/domain/OrderExcelImportOnceModel.java

@@ -0,0 +1,240 @@
+package cn.ezhizao.project.business.order.domain;
+
+import cn.ezhizao.framework.aspectj.lang.annotation.Excel;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+public class OrderExcelImportOnceModel {
+    //    合同编号
+    @Excel(name = "合同编号")
+    private String contractNo;
+    //    合同类型
+    @Excel(name = "合同类型")
+    private String orderType;
+    //    客户名称
+    @Excel(name = "客户名称")
+    private String companyName;
+    //    签约日期
+    @Excel(name = "签约日期", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date formDate;
+    //    签单人
+    @Excel(name = "签单人")
+    private String signerName;
+    //    来源类型
+    @Excel(name = "来源类型")
+    private String sourceCategoryName;
+    //    来源
+    @Excel(name = "来源")
+    private String sourceName;
+    //    备注
+    @Excel(name = "备注")
+    private String remark;
+    //    服务金额
+    @Excel(name = "服务金额")
+    private BigDecimal amount;
+    //    优惠金额
+    @Excel(name = "优惠金额")
+    private BigDecimal discountAmount;
+    //    实收金额
+    @Excel(name = "实收金额")
+    private BigDecimal trueAmount;
+    //    注册
+    @Excel(name = "注册")
+    private String register;
+    //    自有地址
+    @Excel(name = "自有地址")
+    private String privateAddress;
+    //    注册省
+    @Excel(name = "注册省")
+    private String registerProvince;
+    //    注册市
+    @Excel(name = "注册市")
+    private String registerCity;
+    //    注册区
+    @Excel(name = "注册区")
+    private String registerDistrict;
+    //    虚拟地址
+    @Excel(name = "虚拟地址")
+    private String fictionAddress;
+    //    虚拟地址位置
+    @Excel(name = "虚拟地址位置")
+    private String fictionAddressPosition;
+    //    虚拟地址金额
+    @Excel(name = "虚拟地址金额")
+    private BigDecimal fictionAddressAmount;
+    //    执照注册
+    @Excel(name = "执照注册")
+    private String registerLicense;
+    //    执照注册金额
+    @Excel(name = "执照注册金额")
+    private BigDecimal registerLicenseAmount;
+    //    注册刻印
+    @Excel(name = "注册刻印")
+    private String registerSeal;
+    //    注册印章金额
+    @Excel(name = "注册印章金额")
+    private BigDecimal registerSealAmount;
+    //    银行注册
+    @Excel(name = "银行注册")
+    private String registerBank;
+    //    银行注册金额
+    @Excel(name = "银行注册金额")
+    private BigDecimal registerBankAmount;
+    //    税务注册
+    @Excel(name = "税务注册")
+    private String registerTax;
+    //    税务注册金额
+    @Excel(name = "税务注册金额")
+    private BigDecimal registerTaxAmount;
+    //    社保注册
+    @Excel(name = "社保注册")
+    private String registerSecurity;
+    //    社保注册金额
+    @Excel(name = "社保注册金额")
+    private BigDecimal registerSecurityAmount;
+    //    公积金注册
+    @Excel(name = "公积金注册")
+    private String registerHousingFund;
+    //    公积金注册金额
+    @Excel(name = "公积金注册金额")
+    private BigDecimal registerHousingFundAmount;
+    //    注册总金额
+    @Excel(name = "注册总金额")
+    private BigDecimal registerAmount;
+    //    变更
+    @Excel(name = "变更")
+    private String alter;
+    //    变更省
+    @Excel(name = "变更省")
+    private String alterProvince;
+    //    变更市
+    @Excel(name = "变更市")
+    private String alterCity;
+    //    变更区
+    @Excel(name = "变更区")
+    private String alterDistrict;
+    //    执照变更
+    @Excel(name = "执照变更")
+    private String alterLicense;
+    //    执照变更金额
+    @Excel(name = "执照变更金额")
+    private BigDecimal alterLicenseAmount;
+    //    变更刻制印章
+    @Excel(name = "变更刻制印章")
+    private String alterSeal;
+    //    变更刻印金额
+    @Excel(name = "变更刻印金额")
+    private BigDecimal alterSealAmount;
+    //    银行变更
+    @Excel(name = "银行变更")
+    private String alterBank;
+    //    银行变更金额
+    @Excel(name = "银行变更金额")
+    private BigDecimal alterBankAmount;
+    //    税务变更
+    @Excel(name = "税务变更")
+    private String alterTax;
+    //    税务变更金额
+    @Excel(name = "税务变更金额")
+    private BigDecimal alterTaxAmount;
+    //    社保变更
+    @Excel(name = "社保变更")
+    private String alterSecurity;
+    //    社保变更金额
+    @Excel(name = "社保变更金额")
+    private BigDecimal alterSecurityAmount;
+    //    公积金变更
+    @Excel(name = "公积金变更")
+    private String alterHousingFund;
+    //    公积金变更金额
+    @Excel(name = "公积金变更金额")
+    private BigDecimal alterHousingFundAmount;
+    //    变更总金额
+    @Excel(name = "变更总金额")
+    private BigDecimal alterAmount;
+    //    注销
+    @Excel(name = "注销")
+    private String logout;
+    //    注销省
+    @Excel(name = "注销省")
+    private String logoutProvince;
+    //    注销市
+    @Excel(name = "注销市")
+    private String logoutCity;
+    //    注销区
+    @Excel(name = "注销区")
+    private String logoutDistrict;
+    //    执照注销
+    @Excel(name = "执照注销")
+    private String logoutLicense;
+    //    执照注销金额
+    @Excel(name = "执照注销金额")
+    private BigDecimal logoutLicenseAmount;
+    //    银行注销
+    @Excel(name = "银行注销")
+    private String logoutBank;
+    //    银行注销金额
+    @Excel(name = "银行注销金额")
+    private BigDecimal logoutBankAmount;
+    //    税务注销
+    @Excel(name = "税务注销")
+    private String logoutTax;
+    //    税务注销金额
+    @Excel(name = "税务注销金额")
+    private BigDecimal logoutTaxAmount;
+    //    社保注销
+    @Excel(name = "社保注销")
+    private String logoutSecurity;
+    //    社保注销金额
+    @Excel(name = "社保注销金额")
+    private BigDecimal logoutSecurityAmount;
+    //    公积金注销
+    @Excel(name = "公积金注销")
+    private String logoutHousingFund;
+    //    公积金注销金额
+    @Excel(name = "公积金注销金额")
+    private BigDecimal logoutHousingFundAmount;
+    //    资质注销
+    @Excel(name = "资质注销")
+    private String logoutQualified;
+    //    资质注销金额
+    @Excel(name = "资质注销金额")
+    private BigDecimal logoutQualifiedAmount;
+    //    注销总金额
+    @Excel(name = "注销总金额")
+    private BigDecimal logoutAmount;
+    //    资质
+    @Excel(name = "资质")
+    private String qualified;
+    //    资质省
+    @Excel(name = "资质省")
+    private String qualifiedProvince;
+    //    资质市
+    @Excel(name = "资质市")
+    private String qualifiedCity;
+    //    资质区
+    @Excel(name = "资质区")
+    private String qualifiedDistrict;
+    //    资质办理金额
+    @Excel(name = "资质办理金额")
+    private BigDecimal qualifiedAmount;
+    //    其他办理
+    @Excel(name = "其他办理")
+    private String other;
+    //    其他办理省
+    @Excel(name = "其他办理省")
+    private String otherProvince;
+    //    其他办理市
+    @Excel(name = "其他办理市")
+    private String otherCity;
+    //    其他办理区
+    @Excel(name = "其他办理区")
+    private String otherDistrict;
+    //    其他办理金额
+    @Excel(name = "其他办理金额")
+    private BigDecimal otherAmount;
+
+}

+ 32 - 0
src/main/java/cn/ezhizao/project/business/order/mapper/BizArchiveInputDetailMapper.java

@@ -0,0 +1,32 @@
+package cn.ezhizao.project.business.order.mapper;
+
+import cn.ezhizao.project.business.order.domain.BizArchiveInputDetail;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+import java.util.List;
+
+/**
+ * 合同明细Mapper接口
+ *
+ * @author ruoyi
+ * @date 2023-10-16
+ */
+public interface BizArchiveInputDetailMapper extends BaseMapper<BizArchiveInputDetail>
+{
+    /**
+     * 查询合同明细列表
+     *
+     * @param bizArchiveInputDetail 合同明细
+     * @return 合同明细集合
+     */
+    public List<BizArchiveInputDetail> getList(BizArchiveInputDetail bizArchiveInputDetail);
+
+    /**
+     * 物理删除
+     * @param bizArchiveInputDetail
+     * @return 删除结果
+    */
+    public int physicalDelete(BizArchiveInputDetail bizArchiveInputDetail);
+
+    BizArchiveInputDetail getDetail(BizArchiveInputDetail id);
+}

+ 32 - 0
src/main/java/cn/ezhizao/project/business/order/mapper/BizArchiveInputDetailProcessMapper.java

@@ -0,0 +1,32 @@
+package cn.ezhizao.project.business.order.mapper;
+
+import cn.ezhizao.project.business.order.domain.BizArchiveInputDetailProcess;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+import java.util.List;
+
+/**
+ * 订单流程Mapper接口
+ *
+ * @author ruoyi
+ * @date 2023-11-06
+ */
+public interface BizArchiveInputDetailProcessMapper extends BaseMapper<BizArchiveInputDetailProcess>
+{
+    /**
+     * 查询订单流程列表
+     *
+     * @param bizArchiveInputDetailProcess 订单流程
+     * @return 订单流程集合
+     */
+    public List<BizArchiveInputDetailProcess> getList(BizArchiveInputDetailProcess bizArchiveInputDetailProcess);
+
+    /**
+     * 物理删除
+     * @param bizArchiveInputDetailProcess
+     * @return 删除结果
+    */
+    public int physicalDelete(BizArchiveInputDetailProcess bizArchiveInputDetailProcess);
+
+    BizArchiveInputDetailProcess getDetail(Long id);
+}

+ 32 - 0
src/main/java/cn/ezhizao/project/business/order/mapper/BizArchiveInputMapper.java

@@ -0,0 +1,32 @@
+package cn.ezhizao.project.business.order.mapper;
+
+import cn.ezhizao.project.business.order.domain.BizArchiveInput;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+import java.util.List;
+
+/**
+ * 档案入库Mapper接口
+ *
+ * @author ruoyi
+ * @date 2023-10-16
+ */
+public interface BizArchiveInputMapper extends BaseMapper<BizArchiveInput>
+{
+    /**
+     * 查询档案入库列表
+     *
+     * @param bizArchiveInput 档案入库
+     * @return 档案入库集合
+     */
+    public List<BizArchiveInput> getList(BizArchiveInput bizArchiveInput);
+
+    /**
+     * 物理删除
+     * @param bizArchiveInput
+     * @return 删除结果
+    */
+    public int physicalDelete(BizArchiveInput bizArchiveInput);
+
+    int removeByIds(List<Long> ids);
+}

+ 33 - 0
src/main/java/cn/ezhizao/project/business/order/service/IBizArchiveInputDetailProcessService.java

@@ -0,0 +1,33 @@
+package cn.ezhizao.project.business.order.service;
+
+import cn.ezhizao.project.business.order.domain.BizArchiveInputDetailProcess;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+/**
+ * 订单流程Service接口
+ *
+ * @author ruoyi
+ * @date 2023-11-06
+ */
+public interface IBizArchiveInputDetailProcessService extends IService<BizArchiveInputDetailProcess>
+{
+    /**
+     * 查询订单流程列表
+     *
+     * @param bizArchiveInputDetailProcess 订单流程
+     * @return 订单流程集合
+     */
+    public List<BizArchiveInputDetailProcess> getList(BizArchiveInputDetailProcess bizArchiveInputDetailProcess);
+
+    /**
+     * 物理删除
+     * @param bizArchiveInputDetailProcess
+     * @return 删除结果
+     */
+    public int physicalDelete(BizArchiveInputDetailProcess bizArchiveInputDetailProcess);
+
+
+
+}

+ 33 - 0
src/main/java/cn/ezhizao/project/business/order/service/IBizArchiveInputDetailService.java

@@ -0,0 +1,33 @@
+package cn.ezhizao.project.business.order.service;
+
+import cn.ezhizao.project.business.order.domain.BizArchiveInputDetail;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+/**
+ * 合同明细Service接口
+ *
+ * @author ruoyi
+ * @date 2023-10-16
+ */
+public interface IBizArchiveInputDetailService extends IService<BizArchiveInputDetail>
+{
+    /**
+     * 查询合同明细列表
+     *
+     * @param bizArchiveInputDetail 合同明细
+     * @return 合同明细集合
+     */
+    public List<BizArchiveInputDetail> getList(BizArchiveInputDetail bizArchiveInputDetail);
+
+    /**
+     * 物理删除
+     * @param bizArchiveInputDetail
+     * @return 删除结果
+     */
+    public int physicalDelete(BizArchiveInputDetail bizArchiveInputDetail);
+
+    public BizArchiveInputDetail getDetail(BizArchiveInputDetail detail);
+
+}

+ 53 - 0
src/main/java/cn/ezhizao/project/business/order/service/IBizArchiveInputService.java

@@ -0,0 +1,53 @@
+package cn.ezhizao.project.business.order.service;
+
+import cn.ezhizao.project.business.order.domain.*;
+import cn.ezhizao.project.business.workOrder.domain.BizWorkOrder;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+/**
+ * 档案入库Service接口
+ *
+ * @author ruoyi
+ * @date 2023-10-16
+ */
+public interface IBizArchiveInputService extends IService<BizArchiveInput> {
+    /**
+     * 查询档案入库列表
+     *
+     * @param bizArchiveInput 档案入库
+     * @return 档案入库集合
+     */
+    public List<BizArchiveInput> getList(BizArchiveInput bizArchiveInput);
+
+    /**
+     * 物理删除
+     *
+     * @param bizArchiveInput
+     * @return 删除结果
+     */
+    public int physicalDelete(BizArchiveInput bizArchiveInput);
+
+    boolean verify(BizArchiveInput bizArchiveInput);
+
+    boolean removeBatchByIds(List<Long> ids);
+
+    boolean addLoopTasks(BizWorkOrder workOrder);
+
+    boolean stopLoopTasks(BizWorkOrder workOrder);
+
+    boolean stopWorkOrder(BizArchiveInput bizArchiveInput);
+
+    boolean checkWorkOrderStatusProcess(List<BizArchiveInputDetailProcess> delProcess);
+
+    boolean checkWorkOrderStatus(List<BizArchiveInputDetail> delList);
+
+    boolean checkWorkOrderChangeStatus(List<BizArchiveInputDetail> changeList);
+//
+//    String importLoop(List<OrderExcelImportLoopModel> orderList, Long userId, long l);
+//
+//    String importOnce(List<OrderExcelImportOnceModel> orderList, Long userId, long l);
+
+    int removeBinByIds(List<Long> ids);
+}

+ 45 - 0
src/main/java/cn/ezhizao/project/business/order/service/impl/BizArchiveInputDetailProcessServiceImpl.java

@@ -0,0 +1,45 @@
+package cn.ezhizao.project.business.order.service.impl;
+
+import cn.ezhizao.project.business.order.domain.BizArchiveInputDetailProcess;
+import cn.ezhizao.project.business.order.mapper.BizArchiveInputDetailProcessMapper;
+import cn.ezhizao.project.business.order.service.IBizArchiveInputDetailProcessService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 订单流程Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2023-11-06
+ */
+@Service
+public class BizArchiveInputDetailProcessServiceImpl  extends ServiceImpl<BizArchiveInputDetailProcessMapper, BizArchiveInputDetailProcess> implements IBizArchiveInputDetailProcessService
+{
+    @Resource
+    private BizArchiveInputDetailProcessMapper bizArchiveInputDetailProcessMapper;
+
+    /**
+     * 查询订单流程列表
+     *
+     * @param bizArchiveInputDetailProcess 订单流程
+     * @return 订单流程
+     */
+    @Override
+    public List<BizArchiveInputDetailProcess> getList(BizArchiveInputDetailProcess bizArchiveInputDetailProcess)
+    {
+        return bizArchiveInputDetailProcessMapper.getList(bizArchiveInputDetailProcess);
+    }
+
+    /**
+     * 物理删除
+     * @param bizArchiveInputDetailProcess
+     * @return 删除结果
+     */
+    @Override
+    public int physicalDelete(BizArchiveInputDetailProcess bizArchiveInputDetailProcess){ return bizArchiveInputDetailProcessMapper.physicalDelete(bizArchiveInputDetailProcess); };
+
+
+}

+ 52 - 0
src/main/java/cn/ezhizao/project/business/order/service/impl/BizArchiveInputDetailServiceImpl.java

@@ -0,0 +1,52 @@
+package cn.ezhizao.project.business.order.service.impl;
+
+import cn.ezhizao.project.business.order.domain.BizArchiveInputDetail;
+import cn.ezhizao.project.business.order.mapper.BizArchiveInputDetailMapper;
+import cn.ezhizao.project.business.order.service.IBizArchiveInputDetailService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 合同明细Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2023-10-16
+ */
+@Service
+public class BizArchiveInputDetailServiceImpl  extends ServiceImpl<BizArchiveInputDetailMapper, BizArchiveInputDetail> implements IBizArchiveInputDetailService
+{
+    @Resource
+    private BizArchiveInputDetailMapper bizArchiveInputDetailMapper;
+
+    /**
+     * 查询合同明细列表
+     *
+     * @param bizArchiveInputDetail 合同明细
+     * @return 合同明细
+     */
+    @Override
+    public List<BizArchiveInputDetail> getList(BizArchiveInputDetail bizArchiveInputDetail)
+    {
+        return bizArchiveInputDetailMapper.getList(bizArchiveInputDetail);
+    }
+
+    /**
+     * 物理删除
+     * @param bizArchiveInputDetail
+     * @return 删除结果
+     */
+    @Override
+    public int physicalDelete(BizArchiveInputDetail bizArchiveInputDetail){ return bizArchiveInputDetailMapper.physicalDelete(bizArchiveInputDetail); }
+
+    @Override
+    public BizArchiveInputDetail getDetail(BizArchiveInputDetail detail){
+        return bizArchiveInputDetailMapper.getDetail(detail);
+    }
+
+
+
+
+}

+ 1716 - 0
src/main/java/cn/ezhizao/project/business/order/service/impl/BizArchiveInputServiceImpl.java

@@ -0,0 +1,1716 @@
+package cn.ezhizao.project.business.order.service.impl;
+
+import cn.ezhizao.common.constant.HttpStatus;
+import cn.ezhizao.common.exception.ServiceException;
+import cn.ezhizao.common.utils.SecurityUtils;
+import cn.ezhizao.common.utils.StringUtils;
+import cn.ezhizao.common.utils.uuid.SnowflakeIdWorker;
+
+import cn.ezhizao.project.business.company.service.IBizCompanyService;
+
+import cn.ezhizao.project.business.order.domain.*;
+import cn.ezhizao.project.business.order.mapper.BizArchiveInputMapper;
+import cn.ezhizao.project.business.order.service.IBizArchiveInputDetailProcessService;
+import cn.ezhizao.project.business.order.service.IBizArchiveInputDetailService;
+import cn.ezhizao.project.business.order.service.IBizArchiveInputService;
+
+import cn.ezhizao.project.business.workOrder.domain.BizWorkOrder;
+import cn.ezhizao.project.business.workOrder.domain.BizWorkOrderDetail;
+import cn.ezhizao.project.business.workOrder.domain.BizWorkOrderRecord;
+import cn.ezhizao.project.business.workOrder.service.IBizWorkOrderDetailService;
+import cn.ezhizao.project.business.workOrder.service.IBizWorkOrderRecordService;
+import cn.ezhizao.project.business.workOrder.service.IBizWorkOrderService;
+import cn.ezhizao.project.system.domain.SysDictData;
+import cn.ezhizao.project.system.domain.SysFileStorage;
+import cn.ezhizao.project.system.domain.SysUser;
+import cn.ezhizao.project.system.service.ISysDictDataService;
+import cn.ezhizao.project.system.service.ISysFileStorageService;
+import cn.ezhizao.project.system.service.ISysUserService;
+import cn.hutool.core.date.DateField;
+import cn.hutool.core.date.DateTime;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.stream.Collectors;
+
+/**
+ * 档案入库Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2023-10-16
+ */
+@Service
+public class BizArchiveInputServiceImpl extends ServiceImpl<BizArchiveInputMapper, BizArchiveInput> implements IBizArchiveInputService {
+    @Resource
+    private BizArchiveInputMapper bizArchiveInputMapper;
+    @Resource
+    private IBizCompanyService companyService;
+//    @Resource
+//    private IDictRegionService regionService;
+    @Resource
+    private IBizArchiveInputDetailService archiveInputDetailService;
+    @Resource
+    private IBizArchiveInputDetailProcessService archiveInputDetailProcessService;
+    @Resource
+    private IBizWorkOrderService workOrderService;
+//    @Resource
+//    private IBizChannelService channelService;
+    @Resource
+    private IBizWorkOrderDetailService workOrderDetailService;
+    @Resource
+    private IBizWorkOrderRecordService workOrderRecordService;
+    @Resource
+    private ISysFileStorageService fileStorageService;
+    @Resource
+    private ISysDictDataService sysDictDataService;
+    @Resource
+    private ISysUserService userService;
+//    @Resource
+//    private IBizSourceService bizSourceService;
+    @Resource
+    SnowflakeIdWorker snowflakeIdWorker;
+
+    final String[] reportTaskTableNames = {"biz_financial_individual_income_tax", "biz_financial_keep_account", "biz_financial_receive_ticket", "biz_financial_report_tax", "biz_financial_salary"};
+
+    final String[] housingFundTaskTableNames = {"biz_housing_fund_confirm", "biz_housing_fund_declare"};
+
+    final String[] socialSecurityTaskTableNames = {"biz_social_security_confirm", "biz_social_security_declare"};
+
+    /**
+     * 查询档案入库列表
+     *
+     * @param bizArchiveInput 档案入库
+     * @return 档案入库
+     */
+    @Override
+    public List<BizArchiveInput> getList(BizArchiveInput bizArchiveInput) {
+        return bizArchiveInputMapper.getList(bizArchiveInput);
+    }
+
+    /**
+     * 物理删除
+     *
+     * @param bizArchiveInput
+     * @return 删除结果
+     */
+    @Override
+    public int physicalDelete(BizArchiveInput bizArchiveInput) {
+        return bizArchiveInputMapper.physicalDelete(bizArchiveInput);
+    }
+
+    @Override
+    public boolean verify(BizArchiveInput bizArchiveInput) {
+        super.updateById(bizArchiveInput);
+        Long userId = SecurityUtils.getUserId();
+        List<BizArchiveInputDetail> details = archiveInputDetailService.query().eq("contract_id", bizArchiveInput.getId()).list();
+        details.forEach(l -> {
+            BizArchiveInputDetail detail = bizArchiveInput.getDetails().stream().filter(v -> v.getId().equals(l.getId())).findFirst().orElse(l);
+            l.setRedirect(detail.getRedirect() != null ? detail.getRedirect() : false);
+        });
+        List<BizArchiveInputDetailProcess> processes = archiveInputDetailProcessService.query().eq("contract_id", bizArchiveInput.getId()).list();
+        List<BizWorkOrder> newWorkOrders = new ArrayList<>();
+        List<BizWorkOrder> changeWorkOrders = new ArrayList<>();
+        List<BizWorkOrder> stopWorkOrders = new ArrayList<>();
+        List<BizWorkOrderDetail> newWorkOrderDetails = new ArrayList<>();
+        List<BizWorkOrderDetail> changeWorkOrderDetails = new ArrayList<>();
+        List<BizWorkOrderDetail> stopWorkOrderDetails = new ArrayList<>();
+        if (bizArchiveInput.getVerifyStatus().equals(1)) {
+            // 审核通过插入不存在的工单
+            // 判断是循环还是单次
+            if (bizArchiveInput.getServiceType().equals(1)) {
+                // 假设是循环 判断是否已有该任务并没有签出
+                details.forEach(l -> {
+                    List<BizWorkOrder> workOrders = workOrderService.query().eq("company_id", bizArchiveInput.getCompanyId()).eq("task_type_id", l.getTaskTypeId()).eq("is_stop", 0).list();
+                    List<BizWorkOrderDetail> workOrderDetails = workOrderDetailService.query().eq("contract_detail_id", l.getId()).eq("is_stop", 0).list();
+                    // 假设未有该任务 添加任务记录
+                    if (workOrders.isEmpty()) {
+                        BizWorkOrder workOrder = new BizWorkOrder();
+                        workOrder.setCompanyId(bizArchiveInput.getCompanyId());
+                        workOrder.setContractId(bizArchiveInput.getId());
+                        workOrder.setNoContract(0);
+                        workOrder.setContractDetailId(l.getId());
+                        workOrder.setIsStop(0);
+                        workOrder.setTenantId(l.getTenantId());
+                        workOrder.setTaskTypeId(l.getTaskTypeId());
+                        workOrder.setType(bizArchiveInput.getServiceType());
+                        workOrder.setMonthNum(l.getFreeNum() + l.getServiceNum());
+                        workOrder.setWorkOrderNo("workOrder_" + snowflakeIdWorker.nextId());
+                        workOrder.setId(snowflakeIdWorker.nextId());
+                        workOrder.setServiceId(workOrder.getServiceId() == null ? userId : workOrder.getServiceId());
+                        newWorkOrders.add(workOrder);
+                        BizWorkOrderDetail bizWorkOrderDetail = new BizWorkOrderDetail();
+                        bizWorkOrderDetail.setCompanyId(l.getCompanyId());
+                        bizWorkOrderDetail.setWorkOrderId(workOrder.getId());
+                        bizWorkOrderDetail.setContractDetailId(l.getId());
+                        bizWorkOrderDetail.setTaskTypeId(l.getTaskTypeId());
+                        bizWorkOrderDetail.setServiceNum(l.getServiceNum());
+                        bizWorkOrderDetail.setFreeNum(l.getFreeNum());
+                        bizWorkOrderDetail.setTenantId(l.getTenantId());
+                        bizWorkOrderDetail.setContractId(bizArchiveInput.getId());
+                        newWorkOrderDetails.add(bizWorkOrderDetail);
+//                        addLoopTasks(workOrder);
+                    }
+                    else {
+                        // 假设已有该任务 判断是否重建任务 修改任务月数和结束月
+                        if(l.getRedirect() != null && l.getRedirect()) {
+                            // 重建任务将旧任务停止
+                            workOrders.forEach(v -> v.setIsStop(1));
+                            changeWorkOrders.addAll(workOrders);
+                            workOrderDetails.forEach(v -> v.setIsStop(1));
+                            changeWorkOrderDetails.addAll(workOrderDetails);
+                            // 新建新任务。
+                            BizWorkOrder workOrder = new BizWorkOrder();
+                            workOrder.setCompanyId(bizArchiveInput.getCompanyId());
+                            workOrder.setContractId(bizArchiveInput.getId());
+                            workOrder.setNoContract(0);
+                            workOrder.setContractDetailId(l.getId());
+                            workOrder.setIsStop(0);
+                            workOrder.setTenantId(l.getTenantId());
+                            workOrder.setTaskTypeId(l.getTaskTypeId());
+                            workOrder.setType(bizArchiveInput.getServiceType());
+                            workOrder.setMonthNum(l.getFreeNum() + l.getServiceNum());
+                            workOrder.setWorkOrderNo("workOrder_" + snowflakeIdWorker.nextId());
+                            workOrder.setId(snowflakeIdWorker.nextId());
+                            workOrder.setServiceId(workOrder.getServiceId() == null ? userId : workOrder.getServiceId());
+                            newWorkOrders.add(workOrder);
+                            BizWorkOrderDetail bizWorkOrderDetail = new BizWorkOrderDetail();
+                            bizWorkOrderDetail.setCompanyId(l.getCompanyId());
+                            bizWorkOrderDetail.setWorkOrderId(workOrder.getId());
+                            bizWorkOrderDetail.setContractDetailId(l.getId());
+                            bizWorkOrderDetail.setTaskTypeId(l.getTaskTypeId());
+                            bizWorkOrderDetail.setServiceNum(l.getServiceNum());
+                            bizWorkOrderDetail.setFreeNum(l.getFreeNum());
+                            bizWorkOrderDetail.setTenantId(l.getTenantId());
+                            bizWorkOrderDetail.setContractId(bizArchiveInput.getId());
+                            newWorkOrderDetails.add(bizWorkOrderDetail);
+                        } else {
+                            // 判断是否有变更 是变更的先改下
+                            workOrders.forEach(v -> {
+                                Integer monthNum = v.getMonthNum();
+                                BizWorkOrderDetail bizWorkOrderDetail = workOrderDetails.stream().filter(t -> t.getWorkOrderId().equals(v.getId())
+                                ).findFirst().orElse(new BizWorkOrderDetail());
+                                monthNum = monthNum - (bizWorkOrderDetail.getServiceNum() == null ? 0 : bizWorkOrderDetail.getServiceNum()) - (bizWorkOrderDetail.getFreeNum() == null ? 0 : bizWorkOrderDetail.getFreeNum()) + l.getFreeNum() + l.getServiceNum();
+                                bizWorkOrderDetail.setCompanyId(l.getCompanyId());
+                                bizWorkOrderDetail.setWorkOrderId(v.getId());
+                                bizWorkOrderDetail.setContractDetailId(l.getId());
+                                bizWorkOrderDetail.setTaskTypeId(l.getTaskTypeId());
+                                bizWorkOrderDetail.setServiceNum(l.getServiceNum());
+                                bizWorkOrderDetail.setFreeNum(l.getFreeNum());
+                                bizWorkOrderDetail.setTenantId(l.getTenantId());
+                                bizWorkOrderDetail.setContractId(bizArchiveInput.getId());
+                                if (bizWorkOrderDetail.getId() == null) {
+                                    newWorkOrderDetails.add(bizWorkOrderDetail);
+                                } else {
+                                    changeWorkOrderDetails.add(bizWorkOrderDetail);
+                                }
+                                v.setMonthNum(monthNum);
+                                v.setServiceId(v.getServiceId() == null ? userId : v.getServiceId());
+                                if (v.getStartMonth() != null) {
+                                    DateTime startMonth = DateTime.of(v.getStartMonth());
+                                    v.setEndMonth(startMonth.offset(DateField.MONTH, monthNum - 1).toSqlDate());
+                                }
+                                changeWorkOrders.add(v);
+                            });
+                        }
+                    }
+                });
+                List<BizWorkOrderDetail> workOrderDetails = workOrderDetailService.query().eq("contract_id", bizArchiveInput.getId()).eq("is_stop", 0).eq("is_stop", 0).list();
+                stopWorkOrderDetails.addAll(workOrderDetails.stream().filter(v -> changeWorkOrderDetails.stream().noneMatch(e -> e.getId().equals(v.getId()))).collect(Collectors.toList()));
+                if (!stopWorkOrderDetails.isEmpty()) {
+                    List<BizWorkOrder> workOrders = workOrderService.query().in("id", stopWorkOrderDetails.stream().map(BizWorkOrderDetail::getWorkOrderId).collect(Collectors.toList())).list();
+                    // 停用的工单判断是否为空
+                    workOrders.forEach(l -> {
+                        BizWorkOrderDetail detail = stopWorkOrderDetails.stream().filter(v -> v.getWorkOrderId().equals(l.getId())).findFirst().orElse(null);
+                        if (changeWorkOrders.stream().noneMatch(v -> v.getId().equals(l.getId())) && detail != null) {
+                            BizWorkOrder v = changeWorkOrders.stream().filter(e -> e.getId().equals(l.getId())).findFirst().orElse(l);
+                            int monthNum = v.getMonthNum() - (detail.getServiceNum() == null ? 0 : detail.getServiceNum()) - (detail.getFreeNum() == null ? 0 : detail.getFreeNum());
+                            v.setMonthNum(monthNum);
+                            if (v.getStartMonth() != null) {
+                                DateTime startMonth = DateTime.of(v.getStartMonth());
+                                v.setEndMonth(startMonth.offset(DateField.MONTH, monthNum - 1).toSqlDate());
+                            }
+                        }
+                        else if (detail != null) {
+                            int monthNum = l.getMonthNum() - (detail.getServiceNum() == null ? 0 : detail.getServiceNum()) - (detail.getFreeNum() == null ? 0 : detail.getFreeNum());
+
+                            if (monthNum == 0) {
+                                l.setIsStop(1);
+                                stopWorkOrders.add(l);
+                            } else {
+                                l.setMonthNum(monthNum);
+                                if (l.getStartMonth() != null) {
+                                    DateTime startMonth = DateTime.of(l.getStartMonth());
+                                    l.setEndMonth(startMonth.offset(DateField.MONTH, monthNum - 1).toSqlDate());
+                                }
+                                changeWorkOrders.add(l);
+                            }
+                        }
+//                        Integer workMonth = l.getMonthNum() - (detail != null ? detail.getFreeNum() + detail.getServiceNum() : 0);
+//                        if (workMonth.equals(0)) {
+//                            l.setIsStop(1);
+//                            stopWorkOrders.add(l);
+//                        } else {
+//                            l.setMonthNum(workMonth);
+//                            changeWorkOrders.add(l);
+//                        }
+                    });
+                }
+            }
+            else if (bizArchiveInput.getServiceType().equals(2)) {
+                List<BizWorkOrder> workOrders = workOrderService.query().eq("company_id", bizArchiveInput.getCompanyId()).eq("contract_id", bizArchiveInput.getId()).eq("is_stop", 0).list();
+                // 假设是单次任务 添加该任务
+                details.forEach(l -> {
+                    processes.stream().filter(v -> v.getContractDetailId().equals(l.getId())).forEach(v -> {
+                        BizWorkOrder workOrder = workOrders.stream().filter(e -> e.getContractDetailProcessId().equals(v.getId())).findFirst().orElse(new BizWorkOrder());
+                        workOrder.setCity(l.getCity());
+                        workOrder.setNoContract(0);
+                        workOrder.setType(bizArchiveInput.getServiceType());
+                        workOrder.setContractId(bizArchiveInput.getId());
+                        workOrder.setContractDetailProcessId(v.getId());
+                        workOrder.setContractDetailId(l.getId());
+                        workOrder.setTenantId(l.getTenantId());
+                        workOrder.setTaskTypeId(l.getTaskTypeId());
+                        workOrder.setTaskTypeDetailId(v.getTaskTypeDetailId());
+                        workOrder.setProvinceCode(l.getProvinceCode());
+                        workOrder.setProvince(l.getProvince());
+                        workOrder.setCityCode(l.getCityCode());
+                        workOrder.setWorkOrderNo("workOrder_" + snowflakeIdWorker.nextId());
+                        workOrder.setCompanyId(bizArchiveInput.getCompanyId());
+                        workOrder.setDistrictCode(l.getDistrictCode());
+                        workOrder.setDistrict(l.getDistrict());
+                        workOrder.setServiceId(workOrder.getServiceId() == null ? userId : workOrder.getServiceId());
+                        if (workOrder.getId() == null) {
+                            newWorkOrders.add(workOrder);
+                        } else {
+                            changeWorkOrders.add(workOrder);
+                        }
+                    });
+                });
+                // 假设有删除的工单 则 停止工单
+                stopWorkOrders.addAll(workOrders.stream().filter(e -> changeWorkOrders.stream().noneMatch(v -> v.getId().equals(e.getId()))).collect(Collectors.toList()));
+                stopWorkOrders.forEach(l -> l.setIsStop(1));
+            }
+        }
+        boolean status = (newWorkOrderDetails.isEmpty() || workOrderDetailService.saveBatch(newWorkOrderDetails))
+                && (newWorkOrders.isEmpty() || workOrderService.saveBatch(newWorkOrders))
+                && (stopWorkOrders.isEmpty() || workOrderService.updateBatchById(stopWorkOrders))
+                && (changeWorkOrders.isEmpty() || workOrderService.updateBatchById(changeWorkOrders))
+                && (changeWorkOrderDetails.isEmpty() || workOrderDetailService.updateBatchById(changeWorkOrderDetails))
+                && (stopWorkOrderDetails.isEmpty() || workOrderDetailService.updateBatchById(stopWorkOrderDetails));
+        newWorkOrders.forEach(this::addLoopTasks);
+        stopWorkOrders.forEach(this::stopLoopTasks);
+        changeWorkOrders.stream().filter(v -> v.getIsStop().equals(1)).forEach(this::stopLoopTasks);
+        return status;
+    }
+
+//    @Override
+//    public boolean save(BizArchiveInput bizArchiveInput) {
+//        // 判断是否重复订单号
+//        if(this.query().eq("contract_no", bizArchiveInput.getContractNo()).ne("id", bizArchiveInput.getId() == null ? 0L :bizArchiveInput.getId()).count() > 0) throw new ServiceException("订单号不能重复", HttpStatus.ERROR);
+//
+//        boolean saveStatus = super.save(bizArchiveInput);
+//        List<BizArchiveInputDetail> bizArchiveInputDetails = bizArchiveInput.getDetails();
+//        List<BizArchiveInputDetailProcess> bizArchiveInputDetailProcesses = new ArrayList<>();
+//        List<SysFileStorage> files = bizArchiveInput.getFiles();
+////        bizArchiveInputDetails.forEach(l -> {
+////            l.setCompanyId(bizArchiveInput.getCompanyId());
+////            l.setContractId(bizArchiveInput.getId());
+////            l.setTenantId(bizArchiveInput.getTenantId());
+////        });
+//        files.forEach(l -> {
+//            l.setMasterId(bizArchiveInput.getId());
+//            l.setMasterTableName("biz_archive_input");
+//        });
+//        saveStatus = saveStatus && (files.isEmpty() || fileStorageService.saveBatch(files));
+////        saveStatus = saveStatus && (bizArchiveInputDetails.isEmpty() || archiveInputDetailService.saveBatch(bizArchiveInputDetails));
+////        bizArchiveInputDetails.forEach(l -> {
+////            l.getProcesses().forEach(v -> {
+////                v.setCompanyId(bizArchiveInput.getCompanyId());
+////                v.setContractId(bizArchiveInput.getId());
+////                v.setContractDetailId(l.getId());
+////                v.setTenantId(bizArchiveInput.getTenantId());
+////            });
+////            bizArchiveInputDetailProcesses.addAll(l.getProcesses());
+////        });
+//
+//        return saveStatus && (bizArchiveInputDetailProcesses.isEmpty() || archiveInputDetailProcessService.saveBatch(bizArchiveInputDetailProcesses));
+//    }
+
+//    @Override
+//    public boolean updateById(BizArchiveInput bizArchiveInput) {
+//        // 判断是否重复订单号
+//        if(this.query().eq("contract_no", bizArchiveInput.getContractNo()).ne("id", bizArchiveInput.getId() == null ? 0L :bizArchiveInput.getId()).count() > 0) throw new ServiceException("订单号不能重复", HttpStatus.ERROR);
+//
+//        boolean saveStatus = super.updateById(bizArchiveInput);
+//        List<BizArchiveInputDetail> bizArchiveInputDetails = bizArchiveInput.getDetails();
+//        List<BizArchiveInputDetailProcess> bizArchiveInputDetailProcesses = new ArrayList<>();
+//        BizArchiveInputDetail delDetail = new BizArchiveInputDetail();
+//        delDetail.setContractId(bizArchiveInput.getId());
+//        archiveInputDetailService.physicalDelete(delDetail);
+//        BizArchiveInputDetailProcess delProcess = new BizArchiveInputDetailProcess();
+//        delProcess.setContractId(bizArchiveInput.getId());
+//        archiveInputDetailProcessService.physicalDelete(delProcess);
+//        SysFileStorage fileStorage = new SysFileStorage();
+//        fileStorage.setMasterTableName("biz_archive_input");
+//        fileStorage.setMasterId(bizArchiveInput.getId());
+//        fileStorageService.physicalDelete(fileStorage);
+//
+//        List<SysFileStorage> files = bizArchiveInput.getFiles();
+//        files.forEach(l -> {
+//            l.setMasterId(bizArchiveInput.getId());
+//            l.setMasterTableName("biz_archive_input");
+//        });
+//        fileStorageService.saveBatch(files);
+//        bizArchiveInputDetails.forEach(l -> {
+//            l.setCompanyId(bizArchiveInput.getCompanyId());
+//            l.setContractId(bizArchiveInput.getId());
+//            l.setTenantId(bizArchiveInput.getTenantId());
+//        });
+//        saveStatus = saveStatus && archiveInputDetailService.saveBatch(bizArchiveInputDetails);
+//        bizArchiveInputDetails.forEach(l -> {
+//            l.getProcesses().forEach(v -> {
+//                v.setCompanyId(bizArchiveInput.getCompanyId());
+//                v.setContractId(bizArchiveInput.getId());
+//                v.setContractDetailId(l.getId());
+//                v.setTenantId(bizArchiveInput.getTenantId());
+//            });
+//            bizArchiveInputDetailProcesses.addAll(l.getProcesses());
+//        });
+//        return saveStatus && (bizArchiveInputDetailProcesses.isEmpty() || archiveInputDetailProcessService.saveBatch(bizArchiveInputDetailProcesses));
+//    }
+
+    // 创建循环任务
+    @Override
+    public boolean addLoopTasks(BizWorkOrder workOrder) {
+        if (workOrder.getTaskTypeId() == 1L) {
+            return addReportTask(workOrder);
+        } else if (workOrder.getTaskTypeId() == 2L) {
+            return addSocialSecurity(workOrder);
+        } else if (workOrder.getTaskTypeId() == 3L) {
+            return addHousingFund(workOrder);
+        }
+        return true;
+    }
+
+    // 停止循环任务
+    @Override
+    public boolean stopLoopTasks(BizWorkOrder workOrder) {
+        if (workOrder.getTaskTypeId() == 1L) {
+            return stopReportTask(workOrder);
+        } else if (workOrder.getTaskTypeId() == 2L) {
+            return stopSocialSecurity(workOrder);
+        } else if (workOrder.getTaskTypeId() == 3L) {
+            return stopHousingFund(workOrder);
+        }
+        return true;
+    }
+
+    private boolean stopHousingFund(BizWorkOrder workOrder) {
+        List<Map<String, Object>> maps = Arrays.stream(housingFundTaskTableNames).map(v -> {
+            Map<String, Object> map = new HashMap<>();
+            map.put("tableName", v);
+            map.put("workOrderId", workOrder.getId());
+            return map;
+        }).collect(Collectors.toList());
+        workOrderService.stopTasks(maps);
+        return true;
+    }
+
+    private boolean stopSocialSecurity(BizWorkOrder workOrder) {
+        List<Map<String, Object>> maps = Arrays.stream(socialSecurityTaskTableNames).map(v -> {
+            Map<String, Object> map = new HashMap<>();
+            map.put("tableName", v);
+            map.put("workOrderId", workOrder.getId());
+            return map;
+        }).collect(Collectors.toList());
+        workOrderService.stopTasks(maps);
+        return true;
+    }
+
+    private boolean stopReportTask(BizWorkOrder workOrder) {
+        List<Map<String, Object>> maps = Arrays.stream(reportTaskTableNames).map(v -> {
+            Map<String, Object> map = new HashMap<>();
+            map.put("tableName", v);
+            map.put("workOrderId", workOrder.getId());
+            return map;
+        }).collect(Collectors.toList());
+        workOrderService.stopTasks(maps);
+        return true;
+    }
+
+    public boolean addReportTask(BizWorkOrder workOrder) {
+        List<Map<String, Object>> maps = Arrays.stream(reportTaskTableNames).map(v -> {
+            Map<String, Object> map = new HashMap<>();
+            map.put("tableName", v);
+            map.put("id", snowflakeIdWorker.nextId());
+            map.put("workOrderId", workOrder.getId());
+            map.put("creatorId", SecurityUtils.getUserId());
+            map.put("companyId", workOrder.getCompanyId());
+            map.put("tenantId", workOrder.getTenantId());
+            return map;
+        }).collect(Collectors.toList());
+        workOrderService.insertTasks(maps);
+        return true;
+    }
+
+
+    public boolean addHousingFund(BizWorkOrder workOrder) {
+        List<Map<String, Object>> maps = Arrays.stream(housingFundTaskTableNames).map(v -> {
+            Map<String, Object> map = new HashMap<>();
+            map.put("tableName", v);
+            map.put("id", snowflakeIdWorker.nextId());
+            map.put("workOrderId", workOrder.getId());
+            map.put("creatorId", SecurityUtils.getUserId());
+            map.put("companyId", workOrder.getCompanyId());
+            map.put("tenantId", workOrder.getTenantId());
+            return map;
+        }).collect(Collectors.toList());
+        workOrderService.insertTasks(maps);
+        return true;
+    }
+
+    public boolean addSocialSecurity(BizWorkOrder workOrder) {
+        List<Map<String, Object>> maps = Arrays.stream(socialSecurityTaskTableNames).map(v -> {
+            Map<String, Object> map = new HashMap<>();
+            map.put("tableName", v);
+            map.put("id", snowflakeIdWorker.nextId());
+            map.put("workOrderId", workOrder.getId());
+            map.put("creatorId", SecurityUtils.getUserId());
+            map.put("companyId", workOrder.getCompanyId());
+            map.put("tenantId", workOrder.getTenantId());
+            return map;
+        }).collect(Collectors.toList());
+        workOrderService.insertTasks(maps);
+        return true;
+    }
+
+    @Override
+    public boolean removeBatchByIds(List<Long> ids) {
+        // 判断是否已审核
+        if (this.query().in("id", ids).eq("verify_status", 1).count() > 0) {
+            throw new ServiceException("已审核合同不能删除。");
+        } else if (this.query().in("id", ids).eq("status", 8).count() > 0) {
+            throw new ServiceException("合同变更不能删除");
+        } else if (this.query().in("id", ids).eq("status", 9).count() > 0) {
+            throw new ServiceException("合同已解除不能删除");
+        } else {
+            // 未审核的删掉 合同信息和对应明细信息
+            super.removeBatchByIds(ids);
+            QueryWrapper<BizArchiveInputDetail> detailQueryWrapper = new QueryWrapper<>();
+            detailQueryWrapper.in("contract_id", ids);
+            archiveInputDetailService.remove(detailQueryWrapper);
+            QueryWrapper<BizArchiveInputDetailProcess> processQueryWrapper = new QueryWrapper<>();
+            processQueryWrapper.in("contract_id", ids);
+            archiveInputDetailProcessService.remove(processQueryWrapper);
+        }
+        return true;
+    }
+
+    @Override
+    public boolean stopWorkOrder(BizArchiveInput bizArchiveInput) {
+        if (bizArchiveInput.getServiceType().equals(2)) {
+            // 假设是单次任务
+            List<BizWorkOrder> bizWorkOrders = workOrderService.query().eq("contract_id", bizArchiveInput.getId()).list();
+            bizWorkOrders.forEach(v -> {
+                v.setIsStop(1);
+            });
+            return bizWorkOrders.isEmpty() || workOrderService.updateBatchById(bizWorkOrders);
+        } else if (bizArchiveInput.getServiceType().equals(1)) {
+            // 假设是循环任务
+            // 判断是否是最后一个合同 是否有未完成
+            // 假设有未完成 不停止
+            List<BizWorkOrderDetail> details = workOrderDetailService.query().eq("contract_id", bizArchiveInput.getId()).list();
+            List<BizWorkOrder> workOrders = new ArrayList<>();
+            if (!details.isEmpty()) {
+                workOrders = workOrderService.query().in("id", details.stream().map(BizWorkOrderDetail::getWorkOrderId).collect(Collectors.toList())).list();
+                List<BizWorkOrderDetail> otherDetails = workOrderDetailService.query().eq("is_stop", 0).in("work_order_id", workOrders.stream().map(BizWorkOrder::getId).collect(Collectors.toList())).notIn("id", details.stream().map(BizWorkOrderDetail::getId).collect(Collectors.toList())).list();
+                List<BizWorkOrderRecord> records = workOrderRecordService.query().in("work_order_id", workOrders.stream().map(BizWorkOrder::getId).collect(Collectors.toList())).list();
+                workOrders.forEach(l -> {
+                    l.setDetails(otherDetails.stream().filter(v -> v.getWorkOrderId().equals(l.getId())).collect(Collectors.toList()));
+                    l.setRecords(records.stream().filter(v -> v.getWorkOrderId().equals(l.getId())).collect(Collectors.toList()));
+//                l.setMonthNum(l.getDetails().stream().mapToInt(v -> v.getServiceNum() + v.getFreeNum()).sum());
+                    if (l.getStartMonth() != null) {
+                        Integer monthNun = l.getDetails().stream().mapToInt(v -> v.getServiceNum() + v.getFreeNum()).sum();
+                        DateTime startDate = DateTime.of(l.getStartMonth());
+                        DateTime endDate = startDate.offsetNew(DateField.MONTH, monthNun - 1);
+                        // 已完成月小于结束月才会不停工单只修改完成时间。假设完成月大于剩余的结束月则直接停止。
+                        // 一次都没完成的话,也要停止。
+                        if (records.stream().anyMatch(v -> (v.getYear() + v.getMonth()).compareTo(endDate.toString("yyyyMM")) >= 0) || records.isEmpty()) {
+                            // 停止工单
+                            l.setIsStop(1);
+                        } else {
+                            // 不停止工单 只修改工单完成时间
+                            l.setMonthNum(monthNun);
+                            l.setEndMonth(endDate);
+                            // 旧任务明细 停止
+                            details.stream().filter(v -> v.getWorkOrderId().equals(l.getId())).forEach(v -> v.setIsStop(1));
+                        }
+                    } else {
+                        l.setIsStop(1);
+                    }
+                });
+            }
+            workOrders.stream().filter(v -> v.getIsStop().equals(1)).forEach(this::stopLoopTasks);
+            return (workOrders.isEmpty() || workOrderService.updateBatchById(workOrders)) && (details.isEmpty() || workOrderDetailService.updateBatchById(details));
+        } else {
+            return true;
+        }
+    }
+
+
+    @Override
+    public boolean checkWorkOrderStatusProcess(List<BizArchiveInputDetailProcess> delProcess) {
+        // 判断是否任务已完成
+        List<BizWorkOrder> workOrders = workOrderService.query().in("contract_detail_process_id", delProcess.stream().map(BizArchiveInputDetailProcess::getId).collect(Collectors.toList())).list();
+        if (workOrderRecordService.query().in("work_order_id", workOrders.stream().map(BizWorkOrder::getId).collect(Collectors.toList())).count() > 0) {
+            // 存在已经在做的任务不能未完成
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public boolean checkWorkOrderStatus(List<BizArchiveInputDetail> delList) {
+        List<BizWorkOrderDetail> details = workOrderDetailService.query().in("contract_detail_id", delList.stream().map(BizArchiveInputDetail::getId).collect(Collectors.toList())).list();
+        List<BizWorkOrder> workOrders = workOrderService.query().in("id", details.stream().map(BizWorkOrderDetail::getWorkOrderId).collect(Collectors.toList())).list();
+        List<BizWorkOrderDetail> otherDetails = workOrderDetailService.query().eq("is_stop", 0).in("work_order_id", workOrders.stream().map(BizWorkOrder::getId).collect(Collectors.toList())).notIn("id", details.stream().map(BizWorkOrderDetail::getId).collect(Collectors.toList())).list();
+        List<BizWorkOrderRecord> records = workOrderRecordService.query().in("work_order_id", workOrders.stream().map(BizWorkOrder::getId).collect(Collectors.toList())).list();
+        AtomicBoolean status = new AtomicBoolean(true);
+        workOrders.forEach(l -> {
+            // 除了删除的工单明细之外的工单
+            l.setDetails(otherDetails.stream().filter(v -> v.getWorkOrderId().equals(l.getId())).collect(Collectors.toList()));
+            // 完成的部分
+            l.setRecords(records.stream().filter(v -> v.getWorkOrderId().equals(l.getId())).collect(Collectors.toList()));
+            if (l.getStartMonth() != null) {
+                // 余下明细的结束月
+                Integer monthNun = l.getDetails().stream().mapToInt(v -> v.getServiceNum() + v.getFreeNum()).sum();
+                DateTime startDate = DateTime.of(l.getStartMonth());
+                DateTime endDate = startDate.offsetNew(DateField.MONTH, monthNun - 1);
+                if (records.stream().noneMatch(v -> (v.getYear() + v.getMonth()).compareTo(endDate.toString("yyyyMM")) >= 0)) {
+                    status.set(false);
+                } else {
+                    status.set(status.get());
+                }
+            } else {
+                status.set(status.get());
+            }
+        });
+        return status.get();
+    }
+
+    @Override
+    public boolean checkWorkOrderChangeStatus(List<BizArchiveInputDetail> changeList) {
+        // 该合同的工单明细
+        List<BizWorkOrderDetail> details = workOrderDetailService.query().in("contract_id", changeList.stream().map(BizArchiveInputDetail::getContractId).collect(Collectors.toList())).list();
+        // 该合同的工单
+        List<BizWorkOrder> workOrders = workOrderService.query().in("id", details.stream().map(BizWorkOrderDetail::getWorkOrderId).collect(Collectors.toList())).list();
+        // 其他合同的工单明细
+        List<BizWorkOrderDetail> otherDetails = workOrderDetailService.query().eq("is_stop", 0).in("work_order_id", workOrders.stream().map(BizWorkOrder::getId).collect(Collectors.toList())).notIn("id", details.stream().map(BizWorkOrderDetail::getId).collect(Collectors.toList())).list();
+        // 这些工单的完成情况
+        List<BizWorkOrderRecord> records = workOrderRecordService.query().in("work_order_id", workOrders.stream().map(BizWorkOrder::getId).collect(Collectors.toList())).eq("from_id", 0).list();
+        AtomicBoolean status = new AtomicBoolean(true);
+        workOrders.forEach(l -> {
+            // 除了删除的工单明细之外的工单
+            l.setDetails(otherDetails.stream().filter(v -> v.getWorkOrderId().equals(l.getId())).collect(Collectors.toList()));
+            BizWorkOrderDetail item = details.stream().filter(v -> v.getWorkOrderId().equals(l.getId())).findFirst().orElse(new BizWorkOrderDetail());
+            BizArchiveInputDetail itemDetail = changeList.stream().filter(v -> v.getId().equals(item.getTaskTypeId())).findFirst().orElse(new BizArchiveInputDetail());
+
+            // 完成的部分
+            l.setRecords(records.stream().filter(v -> v.getWorkOrderId().equals(l.getId())).collect(Collectors.toList()));
+            if (l.getStartMonth() != null) {
+                // 余下明细的结束月
+                int monthNun = l.getDetails().stream().mapToInt(v -> v.getServiceNum() + v.getFreeNum()).sum() + (itemDetail.getServiceNum() == null ? 0 : itemDetail.getServiceNum()) + (itemDetail.getFreeNum() == null ? 0 : itemDetail.getFreeNum());
+                DateTime startDate = DateTime.of(l.getStartMonth());
+                DateTime endDate = startDate.offsetNew(DateField.MONTH, monthNun - 1);
+                // 任务完成月没有比更改后工单的完成月更大的。
+                if (!records.isEmpty() && records.stream().noneMatch(v -> (v.getYear() + v.getMonth()).compareTo(endDate.toString("yyyyMM")) >= 0)) {
+                    status.set(false);
+                } else {
+                    status.set(status.get());
+                }
+            } else {
+                status.set(status.get());
+            }
+        });
+        return status.get();
+    }
+
+//    @Override
+//    public String importLoop(List<OrderExcelImportLoopModel> orderList, Long userId, long tenantId) {
+//        if (StringUtils.isNull(orderList) || orderList.size() == 0) {
+//            throw new ServiceException("导入数据不能为空!");
+//        }
+//        List<BizArchiveInput> archiveInputs = new ArrayList<>();
+//        List<BizWorkOrder> bizWorkOrders = new ArrayList<>();
+//        List<BizWorkOrderDetail> bizWorkOrderDetails = new ArrayList<>();
+//        List<BizArchiveInputDetail> archiveInputDetails = new ArrayList<>();
+//        List<BizCompany> companies = companyService.query().eq("tenant_id", tenantId).list();
+//        BizSource sourceCondition = new BizSource();
+//        sourceCondition.setTenantId(tenantId);
+//        List<BizSource> sources = bizSourceService.getList(sourceCondition);
+//        int successNum = 0;
+//        int failureNum = 0;
+//        StringBuilder successMsg = new StringBuilder();
+//        StringBuilder failureMsg = new StringBuilder();
+//        for (OrderExcelImportLoopModel item : orderList) {
+//            BizArchiveInput archiveInput = new BizArchiveInput();
+//            BizCompany company = companies.stream().filter(v -> v.getName().equals(item.getCompanyName())).findFirst().orElse(null);
+//            if (company == null) {
+//                failureNum++;
+//                failureMsg.append("<br/>").append(failureNum).append("、客户 ").append(item.getCompanyName()).append(" 不存在");
+//                continue;
+//            }
+//            archiveInput.setCompanyId(company.getId());
+//            archiveInput.setArchiveCode(String.valueOf(snowflakeIdWorker.nextId()));
+//            archiveInput.setAmount(item.getAmount());
+//            archiveInput.setDiscountAmount(item.getDiscountAmount());
+//            archiveInput.setTrueAmount(item.getTrueAmount());
+//            archiveInput.setFormDate(item.getFormDate());
+//            archiveInput.setContractNo(item.getContractNo());
+//            SysUser user = userService.selectUserByUserNameAndTenantId(item.getSignerName(), String.valueOf(tenantId));
+////            if (user == null) {
+////                failureNum++;
+////                failureMsg.append("<br/>").append(failureNum).append("、员工 ").append(item.getSignerName()).append(" 不存在");
+////                continue;
+////            }
+//            // 判断下订单总价单价是否和录入相符
+//            // 假设 amount - discountAmount != trueAmount 跳过该订单
+//            if(item.getAmount().subtract(item.getDiscountAmount() == null ? BigDecimal.ZERO : item.getDiscountAmount()).compareTo(item.getTrueAmount()) != 0) {
+//                failureNum++;
+//                failureMsg.append("<br/>").append(failureNum).append("、订单 ").append(item.getContractNo()).append(" 实际付款金额出错");
+//                continue;
+//            }
+//            if (item.getTrueAmount().compareTo(BigDecimal.ZERO) < 0) {
+//                failureNum++;
+//                failureMsg.append("<br/>").append(failureNum).append("、订单 ").append(item.getContractNo()).append(" 实际付款金额小于0");
+//                continue;
+//            }
+//            // 假设子表金额不等于订单总金额
+//            BigDecimal keepAccount = item.getKeepAccountAmount() == null ? BigDecimal.ZERO : item.getKeepAccountAmount();
+//            BigDecimal security = item.getSocialSecurityAmount() == null ? BigDecimal.ZERO : item.getSocialSecurityAmount();
+//            BigDecimal housingFund = item.getHousingFundAmount() == null ? BigDecimal.ZERO : item.getHousingFundAmount();
+//            BigDecimal returnTax = item.getReturnTaxAmount() == null ? BigDecimal.ZERO : item.getReturnTaxAmount();
+//            if (item.getAmount().compareTo(keepAccount.add(security).add(housingFund).add(returnTax)) != 0) {
+//                failureNum++;
+//                failureMsg.append("<br/>").append(failureNum).append("、订单 ").append(item.getContractNo()).append(" 总金额不等于实际任务金额的和。");
+//                continue;
+//            }
+//
+//            BigDecimal keepAccountPrice = item.getKeepAccountPrice() == null ? BigDecimal.ZERO : item.getKeepAccountPrice();
+//            BigDecimal securityPrice = item.getSocialSecurityPrice() == null ? BigDecimal.ZERO : item.getSocialSecurityPrice();
+//            BigDecimal housingFundPrice = item.getHousingFundPrice() == null ? BigDecimal.ZERO : item.getHousingFundPrice();
+//            BigDecimal returnTaxPrice = item.getReturnTaxPrice() == null ? BigDecimal.ZERO : item.getReturnTaxPrice();
+//            BigDecimal keepAccountMonth = item.getKeepAccountMonth() == null ? BigDecimal.ZERO : BigDecimal.valueOf(item.getKeepAccountMonth());
+//            BigDecimal securityMonth = item.getSocialSecurityMonth() == null ? BigDecimal.ZERO : BigDecimal.valueOf(item.getSocialSecurityMonth());
+//            BigDecimal housingFundMonth = item.getHousingFundMonth() == null ? BigDecimal.ZERO : BigDecimal.valueOf(item.getHousingFundMonth());
+//            BigDecimal returnTaxMonth = item.getReturnTaxMonth() == null ? BigDecimal.ZERO : BigDecimal.valueOf(item.getReturnTaxMonth());
+//            if (keepAccount.compareTo(keepAccountPrice.multiply(keepAccountMonth)) != 0) {
+//                failureNum++;
+//                failureMsg.append("<br/>").append(failureNum).append("、订单 ").append(item.getContractNo()).append(" 记账总金额计算值与记账单价不符。");
+//                continue;
+//            }
+//            if (security.compareTo(securityPrice.multiply(securityMonth)) != 0) {
+//                failureNum++;
+//                failureMsg.append("<br/>").append(failureNum).append("、订单 ").append(item.getContractNo()).append(" 社保总金额计算值与社保单价不符。");
+//                continue;
+//            }
+//            if (housingFund.compareTo(housingFundPrice.multiply(housingFundMonth)) != 0) {
+//                failureNum++;
+//                failureMsg.append("<br/>").append(failureNum).append("、订单 ").append(item.getContractNo()).append(" 公积金总金额计算值与公积金单价不符。");
+//                continue;
+//            }
+//            if (returnTax.compareTo(returnTaxMonth.multiply(returnTaxPrice)) != 0) {
+//                failureNum++;
+//                failureMsg.append("<br/>").append(failureNum).append("、订单 ").append(item.getContractNo()).append(" 返税总金额计算值与返税单价不符。");
+//                continue;
+//            }
+//
+//            archiveInput.setSignerId(user != null ? user.getUserId() : null);
+//            archiveInput.setContractType("新签".equals(item.getOrderType()) ? 0 : "续签".equals(item.getOrderType()) ? 1 : 3);
+//            archiveInput.setServiceType(1);
+//            archiveInput.setTenantId(tenantId);
+//            archiveInput.setId(snowflakeIdWorker.nextId());
+//            archiveInput.setStatus(1);
+//            archiveInput.setVerifyStatus(1);
+//            archiveInput.setRemark(item.getRemark());
+//            String sourceName = item.getSourceName();
+//            String sourceCategory = item.getSourceCategoryName();
+//            BizSource source = sources.stream().filter(v -> v.getTitle().equals(sourceCategory)).findFirst().orElse(null);
+//            if (source != null) {
+//                archiveInput.setSourceCategoryId(source.getId());
+//                switch (source.getReferrerDataSource()) {
+//                    case "company":
+//                        QueryWrapper<BizCompany> companyWrapper = new QueryWrapper<>();
+//                        companyWrapper.eq("name", sourceName);
+//                        BizCompany sourceCompany = companyService.getOne(companyWrapper);
+//                        archiveInput.setSourceId(sourceCompany.getId());
+//                        break;
+//                    case "employee":
+//                        SysUser sourceUser = userService.selectUserByUserName(sourceName);
+//                        archiveInput.setSourceId(sourceUser != null ? sourceUser.getId() : null);
+//                        break;
+//                    case "channel":
+//                        QueryWrapper<BizChannel> channelWrapper = new QueryWrapper<>();
+//                        channelWrapper.eq("name", sourceName);
+//                        BizChannel sourceChannel = channelService.getOne(channelWrapper);
+//                        archiveInput.setSourceId(sourceChannel.getId());
+//                        break;
+//                    default:
+//                        break;
+//                }
+//            }
+//            archiveInputs.add(archiveInput);
+//            if ("是".equals(item.getKeepAccount())) {
+//                BizArchiveInputDetail detail = new BizArchiveInputDetail();
+//                detail.setTaskTypeId(1L);
+//                detail.setAmount(item.getKeepAccountAmount());
+//                detail.setPrice(item.getKeepAccountPrice());
+//                detail.setServiceNum(item.getKeepAccountMonth());
+//                detail.setFreeNum(item.getKeepAccountFreeMonth());
+//                detail.setContractId(archiveInput.getId());
+//                detail.setCompanyId(archiveInput.getCompanyId());
+//                detail.setId(snowflakeIdWorker.nextId());
+//                detail.setTenantId(tenantId);
+//                archiveInputDetails.add(detail);
+//                BizWorkOrder workOrder =  bizWorkOrders.stream().filter(v -> v.getCompanyId().equals(detail.getCompanyId()) && v.getTaskTypeId().equals(1L)).findFirst().orElse(null);
+//                if (workOrder == null) {
+//                    workOrder = new BizWorkOrder();
+//                    workOrder.setCompanyId(archiveInput.getCompanyId());
+//                    workOrder.setType(1);
+//                    workOrder.setTaskTypeId(1L);
+//                    workOrder.setId(snowflakeIdWorker.nextId());
+//                    workOrder.setWorkOrderNo(String.valueOf(snowflakeIdWorker.nextId()));
+//                    workOrder.setContractDetailId(detail.getId());
+//                    workOrder.setCompanyId(archiveInput.getCompanyId());
+//                    workOrder.setContractId(archiveInput.getId());
+//                    workOrder.setStartMonth(item.getKeepAccountStartMonth());
+//                    workOrder.setEndMonth(item.getKeepAccountEndMonth());
+//                    workOrder.setTenantId(tenantId);
+//                    int monthNum = (item.getKeepAccountMonth() == null ? 0 : item.getKeepAccountMonth()) + (item.getKeepAccountFreeMonth() == null ? 0 : item.getKeepAccountFreeMonth());
+//                    workOrder.setMonthNum(monthNum);
+//                } else {
+//                    int monthNum = (item.getKeepAccountMonth() == null ? 0 : item.getKeepAccountMonth()) + (item.getKeepAccountFreeMonth() == null ? 0 : item.getKeepAccountFreeMonth());
+//                    workOrder.setMonthNum(workOrder.getMonthNum() + monthNum);
+//                    workOrder.setEndMonth(workOrder.getEndMonth().compareTo(item.getKeepAccountEndMonth()) > 0 ? workOrder.getEndMonth() : item.getKeepAccountEndMonth());
+//                    workOrder.setStartMonth(workOrder.getStartMonth().compareTo(item.getKeepAccountStartMonth()) > 0 ? item.getKeepAccountStartMonth() : workOrder.getStartMonth());
+//                }
+//                BizWorkOrderDetail workOrderDetail = new BizWorkOrderDetail();
+//                workOrderDetail.setCompanyId(archiveInput.getCompanyId());
+//                workOrderDetail.setContractDetailId(detail.getId());
+//                workOrderDetail.setContractId(archiveInput.getId());
+//                workOrderDetail.setTaskTypeId(detail.getTaskTypeId());
+//                workOrderDetail.setWorkOrderId(workOrder.getId());
+//                workOrderDetail.setFreeNum(detail.getFreeNum());
+//                workOrderDetail.setServiceNum(detail.getServiceNum());
+//                workOrderDetail.setTenantId(tenantId);
+//                bizWorkOrderDetails.add(workOrderDetail);
+//            }
+//            if ("是".equals(item.getSocialSecurity())) {
+//                BizArchiveInputDetail detail = new BizArchiveInputDetail();
+//                detail.setTaskTypeId(2L);
+//                detail.setAmount(item.getSocialSecurityAmount());
+//                detail.setPrice(item.getSocialSecurityPrice());
+//                detail.setServiceNum(item.getSocialSecurityMonth());
+//                detail.setFreeNum(item.getSocialSecurityFreeMonth());
+//                detail.setContractId(archiveInput.getId());
+//                detail.setCompanyId(archiveInput.getCompanyId());
+//                detail.setId(snowflakeIdWorker.nextId());
+//                detail.setTenantId(tenantId);
+//                archiveInputDetails.add(detail);
+//                BizWorkOrder workOrder =  bizWorkOrders.stream().filter(v -> v.getCompanyId().equals(detail.getCompanyId()) && v.getTaskTypeId().equals(2L)).findFirst().orElse(null);
+//                if (workOrder == null) {
+//                    workOrder = new BizWorkOrder();
+//                    workOrder.setCompanyId(archiveInput.getCompanyId());
+//                    workOrder.setType(1);
+//                    workOrder.setTaskTypeId(2L);
+//                    workOrder.setId(snowflakeIdWorker.nextId());
+//                    workOrder.setWorkOrderNo(String.valueOf(snowflakeIdWorker.nextId()));
+//                    workOrder.setContractDetailId(detail.getId());
+//                    workOrder.setCompanyId(archiveInput.getCompanyId());
+//                    workOrder.setContractId(archiveInput.getId());
+//                    workOrder.setStartMonth(item.getSocialSecurityStartMonth());
+//                    workOrder.setEndMonth(item.getSocialSecurityEndMonth());
+//                    workOrder.setTenantId(tenantId);
+//                    int monthNum = (item.getSocialSecurityMonth() == null ? 0 : item.getSocialSecurityMonth()) + (item.getSocialSecurityFreeMonth() == null ? 0 : item.getSocialSecurityFreeMonth());
+//                    workOrder.setMonthNum(monthNum);
+//                    bizWorkOrders.add(workOrder);
+//                } else {
+//                    int monthNum = (item.getSocialSecurityMonth() == null ? 0 : item.getSocialSecurityMonth()) + (item.getSocialSecurityFreeMonth() == null ? 0 : item.getSocialSecurityFreeMonth());
+//                    workOrder.setMonthNum(workOrder.getMonthNum() + monthNum);
+//                    workOrder.setEndMonth(workOrder.getEndMonth().compareTo(item.getSocialSecurityEndMonth()) > 0 ? workOrder.getEndMonth() : item.getSocialSecurityEndMonth());
+//                    workOrder.setStartMonth(workOrder.getStartMonth().compareTo(item.getSocialSecurityStartMonth()) > 0 ? item.getSocialSecurityStartMonth() : workOrder.getStartMonth());
+//                }
+//                BizWorkOrderDetail workOrderDetail = new BizWorkOrderDetail();
+//                workOrderDetail.setCompanyId(archiveInput.getCompanyId());
+//                workOrderDetail.setContractDetailId(detail.getId());
+//                workOrderDetail.setContractId(archiveInput.getId());
+//                workOrderDetail.setTaskTypeId(detail.getTaskTypeId());
+//                workOrderDetail.setWorkOrderId(workOrder.getId());
+//                workOrderDetail.setFreeNum(detail.getFreeNum());
+//                workOrderDetail.setServiceNum(detail.getServiceNum());
+//                workOrderDetail.setTenantId(tenantId);
+//                bizWorkOrderDetails.add(workOrderDetail);
+//            }
+//            if ("是".equals(item.getHousingFund())) {
+//                BizArchiveInputDetail detail = new BizArchiveInputDetail();
+//                detail.setTaskTypeId(3L);
+//                detail.setAmount(item.getHousingFundAmount());
+//                detail.setPrice(item.getHousingFundPrice());
+//                detail.setServiceNum(item.getHousingFundMonth());
+//                detail.setFreeNum(item.getHousingFundFreeMonth());
+//                detail.setContractId(archiveInput.getId());
+//                detail.setCompanyId(archiveInput.getCompanyId());
+//                detail.setId(snowflakeIdWorker.nextId());
+//                detail.setTenantId(tenantId);
+//                archiveInputDetails.add(detail);
+//                BizWorkOrder workOrder =  bizWorkOrders.stream().filter(v -> v.getCompanyId().equals(detail.getCompanyId()) && v.getTaskTypeId().equals(3L)).findFirst().orElse(null);
+//                if (workOrder == null) {
+//                    workOrder = new BizWorkOrder();
+//                    workOrder.setCompanyId(archiveInput.getCompanyId());
+//                    workOrder.setType(1);
+//                    workOrder.setTaskTypeId(3L);
+//                    workOrder.setId(snowflakeIdWorker.nextId());
+//                    workOrder.setWorkOrderNo(String.valueOf(snowflakeIdWorker.nextId()));
+//                    workOrder.setContractDetailId(detail.getId());
+//                    workOrder.setCompanyId(archiveInput.getCompanyId());
+//                    workOrder.setContractId(archiveInput.getId());
+//                    workOrder.setStartMonth(item.getHousingFundStartMonth());
+//                    workOrder.setEndMonth(item.getHousingFundEndMonth());
+//                    workOrder.setTenantId(tenantId);
+//                    int monthNum = (item.getHousingFundMonth() == null ? 0 : item.getHousingFundMonth()) + (item.getHousingFundFreeMonth() == null ? 0 : item.getHousingFundFreeMonth());
+//                    workOrder.setMonthNum(monthNum);
+//                    bizWorkOrders.add(workOrder);
+//                } else {
+//                    int monthNum = (item.getHousingFundMonth() == null ? 0 : item.getHousingFundMonth()) + (item.getHousingFundFreeMonth() == null ? 0 : item.getHousingFundFreeMonth());
+//                    workOrder.setMonthNum(workOrder.getMonthNum() + monthNum);
+//                    workOrder.setEndMonth(workOrder.getEndMonth().compareTo(item.getHousingFundEndMonth()) > 0 ? workOrder.getEndMonth() : item.getHousingFundEndMonth());
+//                    workOrder.setStartMonth(workOrder.getStartMonth().compareTo(item.getHousingFundStartMonth()) > 0 ? item.getHousingFundStartMonth() : workOrder.getStartMonth());
+//                }
+//                BizWorkOrderDetail workOrderDetail = new BizWorkOrderDetail();
+//                workOrderDetail.setCompanyId(archiveInput.getCompanyId());
+//                workOrderDetail.setContractDetailId(detail.getId());
+//                workOrderDetail.setTaskTypeId(detail.getTaskTypeId());
+//                workOrderDetail.setContractId(archiveInput.getId());
+//                workOrderDetail.setWorkOrderId(workOrder.getId());
+//                workOrderDetail.setFreeNum(detail.getFreeNum());
+//                workOrderDetail.setServiceNum(detail.getServiceNum());
+//                workOrderDetail.setTenantId(tenantId);
+//                bizWorkOrderDetails.add(workOrderDetail);
+//            }
+//            if ("是".equals(item.getReturnTax())) {
+//                BizArchiveInputDetail detail = new BizArchiveInputDetail();
+//                detail.setTaskTypeId(4L);
+//                detail.setAmount(item.getReturnTaxAmount());
+//                detail.setPrice(item.getReturnTaxPrice());
+//                detail.setServiceNum(item.getReturnTaxMonth());
+//                detail.setFreeNum(item.getReturnTaxFreeMonth());
+//                detail.setContractId(archiveInput.getId());
+//                detail.setCompanyId(archiveInput.getCompanyId());
+//                detail.setId(snowflakeIdWorker.nextId());
+//                detail.setTenantId(tenantId);
+//                archiveInputDetails.add(detail);
+//                BizWorkOrder workOrder =  bizWorkOrders.stream().filter(v -> v.getCompanyId().equals(detail.getCompanyId()) && v.getTaskTypeId().equals(4L)).findFirst().orElse(null);
+//                if (workOrder == null) {
+//                    workOrder = new BizWorkOrder();
+//                    workOrder.setCompanyId(archiveInput.getCompanyId());
+//                    workOrder.setType(1);
+//                    workOrder.setTaskTypeId(4L);
+//                    workOrder.setId(snowflakeIdWorker.nextId());
+//                    workOrder.setWorkOrderNo(String.valueOf(snowflakeIdWorker.nextId()));
+//                    workOrder.setContractDetailId(detail.getId());
+//                    workOrder.setCompanyId(archiveInput.getCompanyId());
+//                    workOrder.setContractId(archiveInput.getId());
+//                    workOrder.setStartMonth(item.getReturnTaxStartMonth());
+//                    workOrder.setEndMonth(item.getReturnTaxEndMonth());
+//                    workOrder.setTenantId(tenantId);
+//                    int monthNum = (item.getReturnTaxMonth() == null ? 0 : item.getReturnTaxMonth()) + (item.getReturnTaxFreeMonth() == null ? 0 : item.getReturnTaxFreeMonth());
+//                    workOrder.setMonthNum(monthNum);
+//                    bizWorkOrders.add(workOrder);
+//                } else {
+//                    int monthNum = (item.getReturnTaxMonth() == null ? 0 : item.getReturnTaxMonth()) + (item.getReturnTaxFreeMonth() == null ? 0 : item.getReturnTaxFreeMonth());
+//                    workOrder.setMonthNum(workOrder.getMonthNum() + monthNum);
+//                    workOrder.setEndMonth(workOrder.getEndMonth().compareTo(item.getReturnTaxEndMonth()) > 0 ? workOrder.getEndMonth() : item.getReturnTaxEndMonth());
+//                    workOrder.setStartMonth(workOrder.getStartMonth().compareTo(item.getReturnTaxStartMonth()) > 0 ? item.getReturnTaxStartMonth() : workOrder.getStartMonth());
+//                }
+//                BizWorkOrderDetail workOrderDetail = new BizWorkOrderDetail();
+//                workOrderDetail.setCompanyId(archiveInput.getCompanyId());
+//                workOrderDetail.setContractDetailId(detail.getId());
+//                workOrderDetail.setTaskTypeId(detail.getTaskTypeId());
+//                workOrderDetail.setContractId(archiveInput.getId());
+//                workOrderDetail.setWorkOrderId(workOrder.getId());
+//                workOrderDetail.setFreeNum(detail.getFreeNum());
+//                workOrderDetail.setServiceNum(detail.getServiceNum());
+//                workOrderDetail.setTenantId(tenantId);
+//                bizWorkOrderDetails.add(workOrderDetail);
+//            }
+//            successNum++;
+//            successMsg.append("<br/>").append(successNum).append("、订单 ").append(item.getContractNo()).append(" 导入成功");
+//        }
+//        super.saveBatch(archiveInputs);
+//        archiveInputDetailService.saveBatch(archiveInputDetails);
+//        workOrderService.saveBatch(bizWorkOrders);
+//        workOrderDetailService.saveBatch(bizWorkOrderDetails);
+//        bizWorkOrders.forEach(this::addLoopTasks);
+//        if (failureNum > 0) {
+//            failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
+//            throw new ServiceException(failureMsg.toString());
+//        } else {
+//            successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
+//        }
+//        return successMsg.toString();
+//    }
+
+//    @Override
+//    public String importOnce(List<OrderExcelImportOnceModel> orderList, Long userId, long tenantId) {
+//        if (StringUtils.isNull(orderList) || orderList.size() == 0) {
+//            throw new ServiceException("导入数据不能为空!");
+//        }
+//        List<BizArchiveInput> archiveInputs = new ArrayList<>();
+//        List<BizWorkOrder> bizWorkOrders = new ArrayList<>();
+//        List<BizArchiveInputDetail> archiveInputDetails = new ArrayList<>();
+//        List<BizArchiveInputDetailProcess> archiveInputDetailProcesses = new ArrayList<>();
+//        List<BizCompany> companies = companyService.query().eq("tenant_id", tenantId).list();
+//        BizSource sourceCondition = new BizSource();
+//        sourceCondition.setTenantId(tenantId);
+//        List<BizSource> sources = bizSourceService.getList(sourceCondition);
+//        int successNum = 0;
+//        int failureNum = 0;
+//        StringBuilder successMsg = new StringBuilder();
+//        StringBuilder failureMsg = new StringBuilder();
+//        for (OrderExcelImportOnceModel item : orderList) {
+//            BizArchiveInput archiveInput = new BizArchiveInput();
+//            BizCompany company = companies.stream().filter(v -> v.getName().equals(item.getCompanyName())).findFirst().orElse(null);
+//            if (company == null) {
+//                failureNum++;
+//                failureMsg.append("<br/>").append(failureNum).append("、客户 ").append(item.getCompanyName()).append(" 不存在");
+//                continue;
+//            }
+//            SysUser user = userService.selectUserByUserNameAndTenantId(item.getSignerName(), String.valueOf(tenantId));
+////            if (user == null) {
+////                failureNum++;
+////                failureMsg.append("<br/>").append(failureNum).append("、员工 ").append(item.getSignerName()).append(" 不存在");
+////                continue;
+////            }
+//            // 金额验证
+//            // 假设 amount - discountAmount != trueAmount 跳过该订单
+//            if(item.getAmount().subtract(item.getDiscountAmount() == null ? BigDecimal.ZERO : item.getDiscountAmount()).compareTo(item.getTrueAmount()) != 0) {
+//                failureNum++;
+//                failureMsg.append("<br/>").append(failureNum).append("、订单 ").append(item.getContractNo()).append(" 实际付款金额出错");
+//                continue;
+//            }
+//            if (item.getTrueAmount().compareTo(BigDecimal.ZERO) < 0) {
+//                failureNum++;
+//                failureMsg.append("<br/>").append(failureNum).append("、订单 ").append(item.getContractNo()).append(" 实际付款金额小于0");
+//                continue;
+//            }
+//            // 假设子表金额不等于订单总金额
+//            BigDecimal registerAmount = item.getRegisterAmount() == null ? BigDecimal.ZERO : item.getRegisterAmount();
+//            BigDecimal alterAmount = item.getAlterAmount() == null ? BigDecimal.ZERO : item.getAlterAmount();
+//            BigDecimal logoutAmount = item.getLogoutAmount() == null ? BigDecimal.ZERO : item.getLogoutAmount();
+//            BigDecimal qualifiedAmount = item.getQualifiedAmount() == null ? BigDecimal.ZERO : item.getQualifiedAmount();
+//            BigDecimal otherAmount = item.getOtherAmount() == null ? BigDecimal.ZERO : item.getOtherAmount();
+//            if (item.getAmount().compareTo(registerAmount.add(alterAmount).add(logoutAmount).add(qualifiedAmount).add(otherAmount)) != 0) {
+//                failureNum++;
+//                failureMsg.append("<br/>").append(failureNum).append("、订单 ").append(item.getContractNo()).append(" 总金额不等于实际任务金额的和。");
+//                continue;
+//            }
+//
+//            archiveInput.setSignerId(user != null ? user.getUserId() : null);
+//            archiveInput.setCompanyId(company.getId());
+//            archiveInput.setArchiveCode(String.valueOf(snowflakeIdWorker.nextId()));
+//            archiveInput.setAmount(item.getAmount());
+//            archiveInput.setDiscountAmount(item.getDiscountAmount());
+//            archiveInput.setTrueAmount(item.getTrueAmount());
+//            archiveInput.setFormDate(item.getFormDate());
+//            archiveInput.setContractNo(item.getContractNo());
+//            archiveInput.setContractType(0);
+//            archiveInput.setServiceType(2);
+//            archiveInput.setStatus(1);
+//            archiveInput.setVerifyStatus(1);
+//            archiveInput.setRemark(item.getRemark());
+//            archiveInput.setTenantId(tenantId);
+//            archiveInput.setId(snowflakeIdWorker.nextId());
+//            String sourceName = item.getSourceName();
+//            String sourceCategory = item.getSourceCategoryName();
+//            BizSource source = sources.stream().filter(v -> v.getTitle().equals(sourceCategory)).findFirst().orElse(null);
+//            if (source != null) {
+//                archiveInput.setSourceCategoryId(source.getId());
+//                switch (source.getReferrerDataSource()) {
+//                    case "company":
+//                        QueryWrapper<BizCompany> companyWrapper = new QueryWrapper<>();
+//                        companyWrapper.eq("name", sourceName);
+//                        BizCompany sourceCompany = companyService.getOne(companyWrapper);
+//                        archiveInput.setSourceId(sourceCompany.getId());
+//                        break;
+//                    case "employee":
+//                        SysUser sourceUser = userService.selectUserByUserName(sourceName);
+//                        archiveInput.setSourceId(sourceUser != null ? sourceUser.getId() : null);
+//                        break;
+//                    case "channel":
+//                        QueryWrapper<BizChannel> channelWrapper = new QueryWrapper<>();
+//                        channelWrapper.eq("name", sourceName);
+//                        BizChannel sourceChannel = channelService.getOne(channelWrapper);
+//                        archiveInput.setSourceId(sourceChannel.getId());
+//                        break;
+//                    default:
+//                        break;
+//                }
+//            }
+//            archiveInputs.add(archiveInput);
+//            if ("是".equals(item.getRegister())) {
+//                BizArchiveInputDetail register = new BizArchiveInputDetail();
+//                register.setTaskTypeId(5L);
+//                register.setTenantId(tenantId);
+//                register.setCompanyId(archiveInput.getCompanyId());
+//                register.setContractId(archiveInput.getId());
+//                register.setAmount(item.getRegisterAmount());
+//                register.setId(snowflakeIdWorker.nextId());
+//                if ("是".equals(item.getPrivateAddress())) {
+//                    register.setAddressStyle(1);
+//                    register.setProvince(item.getRegisterProvince());
+//                    register.setCity(item.getRegisterCity());
+//                    register.setDistrict(item.getRegisterDistrict());
+//                    DictRegion province = regionService.query().eq("name", item.getRegisterProvince()).eq("substr(code, 3, 4) = '0000'", "0000").one();
+//                    register.setProvinceCode(province != null ? province.getCode() : null);
+//
+//                    DictRegion city = regionService.query().eq("substr(code, 1, 2)", province != null ? province.getCode().substring(0, 2) : null).eq("name", item.getRegisterCity()).one();
+//                    register.setCityCode(province != null && city != null ? city.getCode() : null);
+//                    DictRegion district = regionService.query().eq("substr(code, 1, 4)", city != null ? city.getCode().substring(0, 4) : null).eq("name", item.getRegisterCity()).one();
+//                    register.setDistrictCode(province != null && city != null && district != null ? district.getCode() : null);
+//                }
+//                if ("是".equals(item.getFictionAddress())) {
+//                    register.setAddressStyle(2);
+//                    register.setAddressAmount(item.getFictionAddressAmount());
+//                    register.setAddress(item.getFictionAddressPosition());
+//                    SysDictData conditions = new SysDictData();
+//                    conditions.setDictType("virtual_address");
+//                    conditions.setDictLabel(item.getFictionAddressPosition());
+//                    conditions.setTenantId(tenantId);
+//                    SysDictData dictData = sysDictDataService.selectDictDataList(conditions).stream().findFirst().orElse(null);
+//
+//                    register.setFictionAddressId(dictData != null ? dictData.getDictCode() : null);
+//                }
+//                if ("是".equals(item.getRegisterLicense())) {
+//                    // 执照注册
+//                    BizArchiveInputDetailProcess registerLicense = new BizArchiveInputDetailProcess();
+//                    registerLicense.setTaskTypeId(5L);
+//                    registerLicense.setTaskTypeDetailId(1L);
+//                    registerLicense.setContractId(archiveInput.getId());
+//                    registerLicense.setContractDetailId(register.getId());
+//                    registerLicense.setCompanyId(archiveInput.getCompanyId());
+//                    registerLicense.setAmount(item.getRegisterLicenseAmount());
+//                    archiveInputDetailProcesses.add(registerLicense);
+//                    BizWorkOrder workOrder = new BizWorkOrder();
+//                    registerLicense.setId(snowflakeIdWorker.nextId());
+//                    workOrder.setContractId(archiveInput.getId());
+//                    workOrder.setContractDetailId(register.getId());
+//                    workOrder.setContractDetailProcessId(registerLicense.getId());
+//                    workOrder.setCity(register.getCity());
+//                    workOrder.setProvince(register.getProvince());
+//                    workOrder.setDistrict(register.getDistrict());
+//                    workOrder.setTaskTypeId(5L);
+//                    workOrder.setTaskTypeDetailId(1L);
+//                    workOrder.setCompanyId(archiveInput.getCompanyId());
+//                    workOrder.setTenantId(tenantId);
+//                    workOrder.setWorkOrderNo(String.valueOf(snowflakeIdWorker.nextId()));
+//                    workOrder.setType(2);
+//                    bizWorkOrders.add(workOrder);
+//                }
+//                if ("是".equals(item.getRegisterSeal())) {
+//                    // 注册刻印
+//                    BizArchiveInputDetailProcess registerSeal = new BizArchiveInputDetailProcess();
+//                    registerSeal.setTaskTypeId(5L);
+//                    registerSeal.setTaskTypeDetailId(2L);
+//                    registerSeal.setContractId(archiveInput.getId());
+//                    registerSeal.setContractDetailId(register.getId());
+//                    registerSeal.setCompanyId(archiveInput.getCompanyId());
+//                    registerSeal.setAmount(item.getRegisterSealAmount());
+//                    archiveInputDetailProcesses.add(registerSeal);
+//                    BizWorkOrder workOrder = new BizWorkOrder();
+//                    registerSeal.setId(snowflakeIdWorker.nextId());
+//                    workOrder.setContractId(archiveInput.getId());
+//                    workOrder.setContractDetailId(register.getId());
+//                    workOrder.setContractDetailProcessId(registerSeal.getId());
+//                    workOrder.setCity(register.getCity());
+//                    workOrder.setProvince(register.getProvince());
+//                    workOrder.setDistrict(register.getDistrict());
+//                    workOrder.setTaskTypeId(5L);
+//                    workOrder.setTaskTypeDetailId(2L);
+//                    workOrder.setCompanyId(archiveInput.getCompanyId());
+//                    workOrder.setTenantId(tenantId);
+//                    workOrder.setWorkOrderNo(String.valueOf(snowflakeIdWorker.nextId()));
+//                    workOrder.setType(2);
+//                    bizWorkOrders.add(workOrder);
+//                }
+//                if ("是".equals(item.getRegisterBank())) {
+//                    // 注册银行
+//                    BizArchiveInputDetailProcess registerBank = new BizArchiveInputDetailProcess();
+//                    registerBank.setTaskTypeId(5L);
+//                    registerBank.setTaskTypeDetailId(3L);
+//                    registerBank.setContractId(archiveInput.getId());
+//                    registerBank.setContractDetailId(register.getId());
+//                    registerBank.setCompanyId(archiveInput.getCompanyId());
+//                    registerBank.setAmount(item.getRegisterBankAmount());
+//                    archiveInputDetailProcesses.add(registerBank);
+//                    BizWorkOrder workOrder = new BizWorkOrder();
+//                    registerBank.setId(snowflakeIdWorker.nextId());
+//                    workOrder.setContractId(archiveInput.getId());
+//                    workOrder.setContractDetailId(register.getId());
+//                    workOrder.setContractDetailProcessId(registerBank.getId());
+//                    workOrder.setCity(register.getCity());
+//                    workOrder.setProvince(register.getProvince());
+//                    workOrder.setDistrict(register.getDistrict());
+//                    workOrder.setTaskTypeId(5L);
+//                    workOrder.setTaskTypeDetailId(3L);
+//                    workOrder.setCompanyId(archiveInput.getCompanyId());
+//                    workOrder.setTenantId(tenantId);
+//                    workOrder.setWorkOrderNo(String.valueOf(snowflakeIdWorker.nextId()));
+//                    workOrder.setType(2);
+//                    bizWorkOrders.add(workOrder);
+//                }
+//                if ("是".equals(item.getRegisterTax())) {
+//                    // 注册税务
+//                    BizArchiveInputDetailProcess registerTax = new BizArchiveInputDetailProcess();
+//                    registerTax.setTaskTypeId(5L);
+//                    registerTax.setTaskTypeDetailId(4L);
+//                    registerTax.setContractId(archiveInput.getId());
+//                    registerTax.setContractDetailId(register.getId());
+//                    registerTax.setCompanyId(archiveInput.getCompanyId());
+//                    registerTax.setAmount(item.getRegisterTaxAmount());
+//                    archiveInputDetailProcesses.add(registerTax);
+//                    BizWorkOrder workOrder = new BizWorkOrder();
+//                    registerTax.setId(snowflakeIdWorker.nextId());
+//                    workOrder.setContractId(archiveInput.getId());
+//                    workOrder.setContractDetailId(register.getId());
+//                    workOrder.setContractDetailProcessId(registerTax.getId());
+//                    workOrder.setCity(register.getCity());
+//                    workOrder.setProvince(register.getProvince());
+//                    workOrder.setDistrict(register.getDistrict());
+//                    workOrder.setTaskTypeId(5L);
+//                    workOrder.setTaskTypeDetailId(4L);
+//                    workOrder.setCompanyId(archiveInput.getCompanyId());
+//                    workOrder.setTenantId(tenantId);
+//                    workOrder.setWorkOrderNo(String.valueOf(snowflakeIdWorker.nextId()));
+//                    workOrder.setType(2);
+//                    bizWorkOrders.add(workOrder);
+//                }
+//                if ("是".equals(item.getRegisterSecurity())) {
+//                    // 注册社保
+//                    BizArchiveInputDetailProcess registerSecurity = new BizArchiveInputDetailProcess();
+//                    registerSecurity.setTaskTypeId(5L);
+//                    registerSecurity.setTaskTypeDetailId(5L);
+//                    registerSecurity.setContractId(archiveInput.getId());
+//                    registerSecurity.setContractDetailId(register.getId());
+//                    registerSecurity.setCompanyId(archiveInput.getCompanyId());
+//                    registerSecurity.setAmount(item.getRegisterSecurityAmount());
+//                    archiveInputDetailProcesses.add(registerSecurity);
+//                    BizWorkOrder workOrder = new BizWorkOrder();
+//                    registerSecurity.setId(snowflakeIdWorker.nextId());
+//                    workOrder.setContractId(archiveInput.getId());
+//                    workOrder.setContractDetailId(register.getId());
+//                    workOrder.setContractDetailProcessId(registerSecurity.getId());
+//                    workOrder.setCity(register.getCity());
+//                    workOrder.setProvince(register.getProvince());
+//                    workOrder.setDistrict(register.getDistrict());
+//                    workOrder.setTaskTypeId(5L);
+//                    workOrder.setTaskTypeDetailId(5L);
+//                    workOrder.setTenantId(tenantId);
+//                    workOrder.setCompanyId(archiveInput.getCompanyId());
+//                    workOrder.setWorkOrderNo(String.valueOf(snowflakeIdWorker.nextId()));
+//                    workOrder.setType(2);
+//                    bizWorkOrders.add(workOrder);
+//                }
+//                if ("是".equals(item.getRegisterHousingFund())) {
+//                    // 注册公积金
+//                    BizArchiveInputDetailProcess registerHousingFund = new BizArchiveInputDetailProcess();
+//                    registerHousingFund.setTaskTypeId(5L);
+//                    registerHousingFund.setTaskTypeDetailId(6L);
+//                    registerHousingFund.setContractId(archiveInput.getId());
+//                    registerHousingFund.setContractDetailId(register.getId());
+//                    registerHousingFund.setCompanyId(archiveInput.getCompanyId());
+//                    registerHousingFund.setAmount(item.getRegisterHousingFundAmount());
+//                    archiveInputDetailProcesses.add(registerHousingFund);
+//                    BizWorkOrder workOrder = new BizWorkOrder();
+//                    registerHousingFund.setId(snowflakeIdWorker.nextId());
+//                    workOrder.setContractId(archiveInput.getId());
+//                    workOrder.setContractDetailId(register.getId());
+//                    workOrder.setContractDetailProcessId(registerHousingFund.getId());
+//                    workOrder.setCity(register.getCity());
+//                    workOrder.setProvince(register.getProvince());
+//                    workOrder.setCompanyId(archiveInput.getCompanyId());
+//                    workOrder.setDistrict(register.getDistrict());
+//                    workOrder.setTaskTypeId(5L);
+//                    workOrder.setTaskTypeDetailId(6L);
+//                    workOrder.setTenantId(tenantId);
+//                    workOrder.setWorkOrderNo(String.valueOf(snowflakeIdWorker.nextId()));
+//                    workOrder.setType(2);
+//                    bizWorkOrders.add(workOrder);
+//                }
+//                archiveInputDetails.add(register);
+//            }
+//            if ("是".equals(item.getAlter())) {
+//                BizArchiveInputDetail alter = new BizArchiveInputDetail();
+//                alter.setTaskTypeId(6L);
+//                alter.setTenantId(tenantId);
+//                alter.setCompanyId(archiveInput.getCompanyId());
+//                alter.setContractId(archiveInput.getId());
+//                alter.setAmount(item.getAlterAmount());
+//                alter.setId(snowflakeIdWorker.nextId());
+//                alter.setProvince(item.getAlterProvince());
+//                alter.setCity(item.getAlterCity());
+//                alter.setDistrict(item.getAlterDistrict());
+//                DictRegion province = regionService.query().eq("name", item.getAlterProvince()).eq("substr(code, 3, 4) = '0000'", "0000").one();
+//                alter.setProvinceCode(province != null ? province.getCode() : null);
+//
+//                DictRegion city = regionService.query().eq("substr(code, 1, 2)", province != null ? province.getCode().substring(0, 2) : null).eq("name", item.getAlterCity()).one();
+//                alter.setCityCode(province != null && city != null ? city.getCode() : null);
+//                DictRegion district = regionService.query().eq("substr(code, 1, 4)", city != null ? city.getCode().substring(0, 4) : null).eq("name", item.getAlterDistrict()).one();
+//                alter.setDistrictCode(province != null && city != null && district != null ? district.getCode() : null);
+//                if ("是".equals(item.getAlterLicense())) {
+//                    // 执照变更
+//                    BizArchiveInputDetailProcess alterLicense = new BizArchiveInputDetailProcess();
+//                    alterLicense.setTaskTypeId(6L);
+//                    alterLicense.setTaskTypeDetailId(7L);
+//                    alterLicense.setContractId(archiveInput.getId());
+//                    alterLicense.setContractDetailId(alter.getId());
+//                    alterLicense.setCompanyId(archiveInput.getCompanyId());
+//                    alterLicense.setAmount(item.getAlterLicenseAmount());
+//                    archiveInputDetailProcesses.add(alterLicense);
+//                    BizWorkOrder workOrder = new BizWorkOrder();
+//                    alterLicense.setId(snowflakeIdWorker.nextId());
+//                    workOrder.setContractId(archiveInput.getId());
+//                    workOrder.setContractDetailId(alter.getId());
+//                    workOrder.setCompanyId(archiveInput.getCompanyId());
+//                    workOrder.setContractDetailProcessId(alterLicense.getId());
+//                    workOrder.setCity(alter.getCity());
+//                    workOrder.setProvince(alter.getProvince());
+//                    workOrder.setDistrict(alter.getDistrict());
+//                    workOrder.setTaskTypeId(6L);
+//                    workOrder.setTaskTypeDetailId(7L);
+//                    workOrder.setTenantId(tenantId);
+//                    workOrder.setWorkOrderNo(String.valueOf(snowflakeIdWorker.nextId()));
+//                    workOrder.setType(2);
+//                    bizWorkOrders.add(workOrder);
+//                }
+//                if ("是".equals(item.getAlterSeal())) {
+//                    // 注册刻印
+//                    BizArchiveInputDetailProcess alterSeal = new BizArchiveInputDetailProcess();
+//                    alterSeal.setTaskTypeId(6L);
+//                    alterSeal.setTaskTypeDetailId(8L);
+//                    alterSeal.setContractId(archiveInput.getId());
+//                    alterSeal.setContractDetailId(alter.getId());
+//                    alterSeal.setCompanyId(archiveInput.getCompanyId());
+//                    alterSeal.setAmount(item.getAlterSealAmount());
+//                    archiveInputDetailProcesses.add(alterSeal);
+//                    BizWorkOrder workOrder = new BizWorkOrder();
+//                    alterSeal.setId(snowflakeIdWorker.nextId());
+//                    workOrder.setContractId(archiveInput.getId());
+//                    workOrder.setContractDetailId(alter.getId());
+//                    workOrder.setCompanyId(archiveInput.getCompanyId());
+//                    workOrder.setContractDetailProcessId(alterSeal.getId());
+//                    workOrder.setCity(alter.getCity());
+//                    workOrder.setProvince(alter.getProvince());
+//                    workOrder.setDistrict(alter.getDistrict());
+//                    workOrder.setTaskTypeId(6L);
+//                    workOrder.setTaskTypeDetailId(8L);
+//                    workOrder.setTenantId(tenantId);
+//                    workOrder.setWorkOrderNo(String.valueOf(snowflakeIdWorker.nextId()));
+//                    workOrder.setType(2);
+//                    bizWorkOrders.add(workOrder);
+//                }
+//                if ("是".equals(item.getAlterBank())) {
+//                    // 注册银行
+//                    BizArchiveInputDetailProcess alterBank = new BizArchiveInputDetailProcess();
+//                    alterBank.setTaskTypeId(6L);
+//                    alterBank.setTaskTypeDetailId(9L);
+//                    alterBank.setContractId(archiveInput.getId());
+//                    alterBank.setContractDetailId(alter.getId());
+//                    alterBank.setCompanyId(archiveInput.getCompanyId());
+//                    alterBank.setAmount(item.getAlterBankAmount());
+//                    archiveInputDetailProcesses.add(alterBank);
+//                    BizWorkOrder workOrder = new BizWorkOrder();
+//                    alterBank.setId(snowflakeIdWorker.nextId());
+//                    workOrder.setContractId(archiveInput.getId());
+//                    workOrder.setContractDetailId(alter.getId());
+//                    workOrder.setCompanyId(archiveInput.getCompanyId());
+//                    workOrder.setContractDetailProcessId(alterBank.getId());
+//                    workOrder.setCity(alter.getCity());
+//                    workOrder.setProvince(alter.getProvince());
+//                    workOrder.setDistrict(alter.getDistrict());
+//                    workOrder.setTaskTypeId(6L);
+//                    workOrder.setTaskTypeDetailId(9L);
+//                    workOrder.setTenantId(tenantId);
+//                    workOrder.setWorkOrderNo(String.valueOf(snowflakeIdWorker.nextId()));
+//                    workOrder.setType(2);
+//                    bizWorkOrders.add(workOrder);
+//                }
+//                if ("是".equals(item.getAlterTax())) {
+//                    // 注册税务
+//                    BizArchiveInputDetailProcess alterTax = new BizArchiveInputDetailProcess();
+//                    alterTax.setTaskTypeId(6L);
+//                    alterTax.setTaskTypeDetailId(10L);
+//                    alterTax.setContractId(archiveInput.getId());
+//                    alterTax.setContractDetailId(alter.getId());
+//                    alterTax.setCompanyId(archiveInput.getCompanyId());
+//                    alterTax.setAmount(item.getAlterTaxAmount());
+//                    archiveInputDetailProcesses.add(alterTax);
+//                    BizWorkOrder workOrder = new BizWorkOrder();
+//                    alterTax.setId(snowflakeIdWorker.nextId());
+//                    workOrder.setContractId(archiveInput.getId());
+//                    workOrder.setContractDetailId(alter.getId());
+//                    workOrder.setCompanyId(archiveInput.getCompanyId());
+//                    workOrder.setContractDetailProcessId(alterTax.getId());
+//                    workOrder.setCity(alter.getCity());
+//                    workOrder.setProvince(alter.getProvince());
+//                    workOrder.setDistrict(alter.getDistrict());
+//                    workOrder.setTaskTypeId(6L);
+//                    workOrder.setTaskTypeDetailId(10L);
+//                    workOrder.setTenantId(tenantId);
+//                    workOrder.setWorkOrderNo(String.valueOf(snowflakeIdWorker.nextId()));
+//                    workOrder.setType(2);
+//                    bizWorkOrders.add(workOrder);
+//                }
+//                if ("是".equals(item.getAlterSecurity())) {
+//                    // 注册社保
+//                    BizArchiveInputDetailProcess alterSecurity = new BizArchiveInputDetailProcess();
+//                    alterSecurity.setTaskTypeId(6L);
+//                    alterSecurity.setTaskTypeDetailId(11L);
+//                    alterSecurity.setContractId(archiveInput.getId());
+//                    alterSecurity.setContractDetailId(alter.getId());
+//                    alterSecurity.setCompanyId(archiveInput.getCompanyId());
+//                    alterSecurity.setAmount(item.getAlterSecurityAmount());
+//                    archiveInputDetailProcesses.add(alterSecurity);
+//                    BizWorkOrder workOrder = new BizWorkOrder();
+//                    alterSecurity.setId(snowflakeIdWorker.nextId());
+//                    workOrder.setContractId(archiveInput.getId());
+//                    workOrder.setContractDetailId(alter.getId());
+//                    workOrder.setCompanyId(archiveInput.getCompanyId());
+//                    workOrder.setContractDetailProcessId(alterSecurity.getId());
+//                    workOrder.setCity(alter.getCity());
+//                    workOrder.setProvince(alter.getProvince());
+//                    workOrder.setDistrict(alter.getDistrict());
+//                    workOrder.setTaskTypeId(6L);
+//                    workOrder.setTaskTypeDetailId(11L);
+//                    workOrder.setTenantId(tenantId);
+//                    workOrder.setWorkOrderNo(String.valueOf(snowflakeIdWorker.nextId()));
+//                    workOrder.setType(2);
+//                    bizWorkOrders.add(workOrder);
+//                }
+//                if ("是".equals(item.getAlterHousingFund())) {
+//                    // 注册公积金
+//                    BizArchiveInputDetailProcess alterHousingFund = new BizArchiveInputDetailProcess();
+//                    alterHousingFund.setTaskTypeId(6L);
+//                    alterHousingFund.setTaskTypeDetailId(12L);
+//                    alterHousingFund.setContractId(archiveInput.getId());
+//                    alterHousingFund.setContractDetailId(alter.getId());
+//                    alterHousingFund.setCompanyId(archiveInput.getCompanyId());
+//                    alterHousingFund.setAmount(item.getAlterHousingFundAmount());
+//                    archiveInputDetailProcesses.add(alterHousingFund);
+//                    BizWorkOrder workOrder = new BizWorkOrder();
+//                    alterHousingFund.setId(snowflakeIdWorker.nextId());
+//                    workOrder.setContractId(archiveInput.getId());
+//                    workOrder.setContractDetailId(alter.getId());
+//                    workOrder.setCompanyId(archiveInput.getCompanyId());
+//                    workOrder.setContractDetailProcessId(alterHousingFund.getId());
+//                    workOrder.setCity(alter.getCity());
+//                    workOrder.setProvince(alter.getProvince());
+//                    workOrder.setDistrict(alter.getDistrict());
+//                    workOrder.setTaskTypeId(6L);
+//                    workOrder.setTaskTypeDetailId(12L);
+//                    workOrder.setTenantId(tenantId);
+//                    workOrder.setWorkOrderNo(String.valueOf(snowflakeIdWorker.nextId()));
+//                    workOrder.setType(2);
+//                    bizWorkOrders.add(workOrder);
+//                }
+//                archiveInputDetails.add(alter);
+//            }
+//            if ("是".equals(item.getLogout())) {
+//                BizArchiveInputDetail logout = new BizArchiveInputDetail();
+//                logout.setTaskTypeId(7L);
+//                logout.setTenantId(tenantId);
+//                logout.setCompanyId(archiveInput.getCompanyId());
+//                logout.setContractId(archiveInput.getId());
+//                logout.setAmount(item.getLogoutAmount());
+//                logout.setId(snowflakeIdWorker.nextId());
+//                logout.setProvince(item.getLogoutProvince());
+//                logout.setCity(item.getLogoutCity());
+//                logout.setDistrict(item.getLogoutDistrict());
+//                DictRegion province = regionService.query().eq("name", item.getLogoutProvince()).eq("substr(code, 3, 4) = '0000'", "0000").one();
+//                logout.setProvinceCode(province != null ? province.getCode() : null);
+//
+//                DictRegion city = regionService.query().eq("substr(code, 1, 2)", province != null ? province.getCode().substring(0, 2) : null).eq("name", item.getLogoutCity()).one();
+//                logout.setCityCode(province != null && city != null ? city.getCode() : null);
+//                DictRegion district = regionService.query().eq("substr(code, 1, 4)", city != null ? city.getCode().substring(0, 4) : null).eq("name", item.getLogoutDistrict()).one();
+//                logout.setDistrictCode(province != null && city != null && district != null ? district.getCode() : null);
+//                if ("是".equals(item.getLogoutLicense())) {
+//                    // 执照变更
+//                    BizArchiveInputDetailProcess logoutLicense = new BizArchiveInputDetailProcess();
+//                    logoutLicense.setTaskTypeId(7L);
+//                    logoutLicense.setTaskTypeDetailId(13L);
+//                    logoutLicense.setContractId(archiveInput.getId());
+//                    logoutLicense.setContractDetailId(logout.getId());
+//                    logoutLicense.setCompanyId(archiveInput.getCompanyId());
+//                    logoutLicense.setAmount(item.getLogoutLicenseAmount());
+//                    archiveInputDetailProcesses.add(logoutLicense);
+//                    BizWorkOrder workOrder = new BizWorkOrder();
+//                    logoutLicense.setId(snowflakeIdWorker.nextId());
+//                    workOrder.setContractId(archiveInput.getId());
+//                    workOrder.setContractDetailId(logout.getId());
+//                    workOrder.setCompanyId(archiveInput.getCompanyId());
+//                    workOrder.setContractDetailProcessId(logoutLicense.getId());
+//                    workOrder.setCity(logout.getCity());
+//                    workOrder.setProvince(logout.getProvince());
+//                    workOrder.setDistrict(logout.getDistrict());
+//                    workOrder.setTaskTypeId(7L);
+//                    workOrder.setTaskTypeDetailId(13L);
+//                    workOrder.setTenantId(tenantId);
+//                    workOrder.setWorkOrderNo(String.valueOf(snowflakeIdWorker.nextId()));
+//                    workOrder.setType(2);
+//                    bizWorkOrders.add(workOrder);
+//                }
+//                if ("是".equals(item.getLogoutBank())) {
+//                    // 注册银行
+//                    BizArchiveInputDetailProcess logoutBank = new BizArchiveInputDetailProcess();
+//                    logoutBank.setTaskTypeId(7L);
+//                    logoutBank.setTaskTypeDetailId(14L);
+//                    logoutBank.setContractId(archiveInput.getId());
+//                    logoutBank.setContractDetailId(logout.getId());
+//                    logoutBank.setCompanyId(archiveInput.getCompanyId());
+//                    logoutBank.setAmount(item.getLogoutBankAmount());
+//                    archiveInputDetailProcesses.add(logoutBank);
+//                    BizWorkOrder workOrder = new BizWorkOrder();
+//                    logoutBank.setId(snowflakeIdWorker.nextId());
+//                    workOrder.setContractId(archiveInput.getId());
+//                    workOrder.setContractDetailId(logout.getId());
+//                    workOrder.setCompanyId(archiveInput.getCompanyId());
+//                    workOrder.setContractDetailProcessId(logoutBank.getId());
+//                    workOrder.setCity(logout.getCity());
+//                    workOrder.setProvince(logout.getProvince());
+//                    workOrder.setDistrict(logout.getDistrict());
+//                    workOrder.setTaskTypeId(7L);
+//                    workOrder.setTaskTypeDetailId(14L);
+//                    workOrder.setTenantId(tenantId);
+//                    workOrder.setWorkOrderNo(String.valueOf(snowflakeIdWorker.nextId()));
+//                    workOrder.setType(2);
+//                    bizWorkOrders.add(workOrder);
+//                }
+//                if ("是".equals(item.getLogoutTax())) {
+//                    // 注册税务
+//                    BizArchiveInputDetailProcess logoutTax = new BizArchiveInputDetailProcess();
+//                    logoutTax.setTaskTypeId(7L);
+//                    logoutTax.setTaskTypeDetailId(15L);
+//                    logoutTax.setContractId(archiveInput.getId());
+//                    logoutTax.setContractDetailId(logout.getId());
+//                    logoutTax.setCompanyId(archiveInput.getCompanyId());
+//                    logoutTax.setAmount(item.getLogoutTaxAmount());
+//                    archiveInputDetailProcesses.add(logoutTax);
+//                    BizWorkOrder workOrder = new BizWorkOrder();
+//                    logoutTax.setId(snowflakeIdWorker.nextId());
+//                    workOrder.setContractId(archiveInput.getId());
+//                    workOrder.setContractDetailId(logout.getId());
+//                    workOrder.setCompanyId(archiveInput.getCompanyId());
+//                    workOrder.setContractDetailProcessId(logoutTax.getId());
+//                    workOrder.setCity(logout.getCity());
+//                    workOrder.setProvince(logout.getProvince());
+//                    workOrder.setDistrict(logout.getDistrict());
+//                    workOrder.setTaskTypeId(7L);
+//                    workOrder.setTaskTypeDetailId(15L);
+//                    workOrder.setTenantId(tenantId);
+//                    workOrder.setWorkOrderNo(String.valueOf(snowflakeIdWorker.nextId()));
+//                    workOrder.setType(2);
+//                    bizWorkOrders.add(workOrder);
+//                }
+//                if ("是".equals(item.getLogoutSecurity())) {
+//                    // 注册社保
+//                    BizArchiveInputDetailProcess logoutSecurity = new BizArchiveInputDetailProcess();
+//                    logoutSecurity.setTaskTypeId(7L);
+//                    logoutSecurity.setTaskTypeDetailId(16L);
+//                    logoutSecurity.setContractId(archiveInput.getId());
+//                    logoutSecurity.setContractDetailId(logout.getId());
+//                    logoutSecurity.setCompanyId(archiveInput.getCompanyId());
+//                    logoutSecurity.setAmount(item.getLogoutSecurityAmount());
+//                    archiveInputDetailProcesses.add(logoutSecurity);
+//                    BizWorkOrder workOrder = new BizWorkOrder();
+//                    logoutSecurity.setId(snowflakeIdWorker.nextId());
+//                    workOrder.setContractId(archiveInput.getId());
+//                    workOrder.setContractDetailId(logout.getId());
+//                    workOrder.setCompanyId(archiveInput.getCompanyId());
+//                    workOrder.setContractDetailProcessId(logoutSecurity.getId());
+//                    workOrder.setCity(logout.getCity());
+//                    workOrder.setProvince(logout.getProvince());
+//                    workOrder.setDistrict(logout.getDistrict());
+//                    workOrder.setTaskTypeId(7L);
+//                    workOrder.setTaskTypeDetailId(16L);
+//                    workOrder.setTenantId(tenantId);
+//                    workOrder.setWorkOrderNo(String.valueOf(snowflakeIdWorker.nextId()));
+//                    workOrder.setType(2);
+//                    bizWorkOrders.add(workOrder);
+//                }
+//                if ("是".equals(item.getLogoutHousingFund())) {
+//                    // 注册公积金
+//                    BizArchiveInputDetailProcess logoutHousingFund = new BizArchiveInputDetailProcess();
+//                    logoutHousingFund.setTaskTypeId(7L);
+//                    logoutHousingFund.setTaskTypeDetailId(17L);
+//                    logoutHousingFund.setContractId(archiveInput.getId());
+//                    logoutHousingFund.setContractDetailId(logout.getId());
+//                    logoutHousingFund.setCompanyId(archiveInput.getCompanyId());
+//                    logoutHousingFund.setAmount(item.getLogoutHousingFundAmount());
+//                    archiveInputDetailProcesses.add(logoutHousingFund);
+//                    BizWorkOrder workOrder = new BizWorkOrder();
+//                    logoutHousingFund.setId(snowflakeIdWorker.nextId());
+//                    workOrder.setContractId(archiveInput.getId());
+//                    workOrder.setContractDetailId(logout.getId());
+//                    workOrder.setCompanyId(archiveInput.getCompanyId());
+//                    workOrder.setContractDetailProcessId(logoutHousingFund.getId());
+//                    workOrder.setCity(logout.getCity());
+//                    workOrder.setProvince(logout.getProvince());
+//                    workOrder.setDistrict(logout.getDistrict());
+//                    workOrder.setTaskTypeId(7L);
+//                    workOrder.setTaskTypeDetailId(17L);
+//                    workOrder.setTenantId(tenantId);
+//                    workOrder.setWorkOrderNo(String.valueOf(snowflakeIdWorker.nextId()));
+//                    workOrder.setType(2);
+//                    bizWorkOrders.add(workOrder);
+//                }
+//                if ("是".equals(item.getLogoutQualified())) {
+//                    // 注册公积金
+//                    BizArchiveInputDetailProcess logoutQualified = new BizArchiveInputDetailProcess();
+//                    logoutQualified.setTaskTypeId(7L);
+//                    logoutQualified.setTaskTypeDetailId(18L);
+//                    logoutQualified.setContractId(archiveInput.getId());
+//                    logoutQualified.setContractDetailId(logout.getId());
+//                    logoutQualified.setCompanyId(archiveInput.getCompanyId());
+//                    logoutQualified.setAmount(item.getLogoutQualifiedAmount());
+//                    archiveInputDetailProcesses.add(logoutQualified);
+//                    BizWorkOrder workOrder = new BizWorkOrder();
+//                    logoutQualified.setId(snowflakeIdWorker.nextId());
+//                    workOrder.setContractId(archiveInput.getId());
+//                    workOrder.setContractDetailId(logout.getId());
+//                    workOrder.setCompanyId(archiveInput.getCompanyId());
+//                    workOrder.setContractDetailProcessId(logoutQualified.getId());
+//                    workOrder.setCity(logout.getCity());
+//                    workOrder.setProvince(logout.getProvince());
+//                    workOrder.setDistrict(logout.getDistrict());
+//                    workOrder.setTaskTypeId(7L);
+//                    workOrder.setTaskTypeDetailId(18L);
+//                    workOrder.setTenantId(tenantId);
+//                    workOrder.setWorkOrderNo(String.valueOf(snowflakeIdWorker.nextId()));
+//                    workOrder.setType(2);
+//                    bizWorkOrders.add(workOrder);
+//                }
+//                archiveInputDetails.add(logout);
+//            }
+//            if ("是".equals(item.getQualified())) {
+//                BizArchiveInputDetail qualified = new BizArchiveInputDetail();
+//                qualified.setTaskTypeId(8L);
+//                qualified.setTenantId(tenantId);
+//                qualified.setCompanyId(archiveInput.getCompanyId());
+//                qualified.setContractId(archiveInput.getId());
+//                qualified.setAmount(item.getQualifiedAmount());
+//                qualified.setId(snowflakeIdWorker.nextId());
+//                qualified.setProvince(item.getQualifiedProvince());
+//                qualified.setCity(item.getQualifiedCity());
+//                qualified.setDistrict(item.getQualifiedDistrict());
+//                DictRegion province = regionService.query().eq("name", item.getQualifiedProvince()).eq("substr(code, 3, 4) = '0000'", "0000").one();
+//                qualified.setProvinceCode(province != null ? province.getCode() : null);
+//
+//                DictRegion city = regionService.query().eq("substr(code, 1, 2)", province != null ? province.getCode().substring(0, 2) : null).eq("name", item.getQualifiedCity()).one();
+//                qualified.setCityCode(province != null && city != null ? city.getCode() : null);
+//                DictRegion district = regionService.query().eq("substr(code, 1, 4)", city != null ? city.getCode().substring(0, 4) : null).eq("name", item.getQualifiedDistrict()).one();
+//                qualified.setDistrictCode(province != null && city != null && district != null ? district.getCode() : null);
+//                // 资质申请
+//                BizArchiveInputDetailProcess qualifiedProcess = new BizArchiveInputDetailProcess();
+//                qualifiedProcess.setTaskTypeId(8L);
+//                qualifiedProcess.setTaskTypeDetailId(19L);
+//                qualifiedProcess.setContractId(archiveInput.getId());
+//                qualifiedProcess.setContractDetailId(qualified.getId());
+//                qualifiedProcess.setCompanyId(archiveInput.getCompanyId());
+//                qualifiedProcess.setAmount(item.getQualifiedAmount());
+//                archiveInputDetailProcesses.add(qualifiedProcess);
+//                archiveInputDetails.add(qualified);
+//                BizWorkOrder workOrder = new BizWorkOrder();
+//                qualifiedProcess.setId(snowflakeIdWorker.nextId());
+//                workOrder.setContractId(archiveInput.getId());
+//                workOrder.setContractDetailId(qualified.getId());
+//                workOrder.setCompanyId(archiveInput.getCompanyId());
+//                workOrder.setContractDetailProcessId(qualifiedProcess.getId());
+//                workOrder.setCity(qualified.getCity());
+//                workOrder.setProvince(qualified.getProvince());
+//                workOrder.setDistrict(qualified.getDistrict());
+//                workOrder.setTaskTypeId(8L);
+//                workOrder.setTaskTypeDetailId(19L);
+//                workOrder.setTenantId(tenantId);
+//                workOrder.setWorkOrderNo(String.valueOf(snowflakeIdWorker.nextId()));
+//                workOrder.setType(2);
+//                bizWorkOrders.add(workOrder);
+//            }
+//            if ("是".equals(item.getOther())) {
+//                BizArchiveInputDetail other = new BizArchiveInputDetail();
+//                other.setTaskTypeId(9L);
+//                other.setTenantId(tenantId);
+//                other.setCompanyId(archiveInput.getCompanyId());
+//                other.setContractId(archiveInput.getId());
+//                other.setAmount(item.getOtherAmount());
+//                other.setId(snowflakeIdWorker.nextId());
+//                other.setProvince(item.getOtherProvince());
+//                other.setCity(item.getOtherCity());
+//                other.setDistrict(item.getOtherDistrict());
+//                DictRegion province = regionService.query().eq("name", item.getOtherProvince()).eq("substr(code, 3, 4) = '0000'", "0000").one();
+//                other.setProvinceCode(province != null ? province.getCode() : null);
+//
+//                DictRegion city = regionService.query().eq("substr(code, 1, 2)", province != null ? province.getCode().substring(0, 2) : null).eq("name", item.getOtherCity()).one();
+//                other.setCityCode(province != null && city != null ? city.getCode() : null);
+//                DictRegion district = regionService.query().eq("substr(code, 1, 4)", city != null ? city.getCode().substring(0, 4) : null).eq("name", item.getOtherDistrict()).one();
+//                other.setDistrictCode(province != null && city != null && district != null ? district.getCode() : null);
+//                // 资质申请
+//                BizArchiveInputDetailProcess otherProcess = new BizArchiveInputDetailProcess();
+//                otherProcess.setTaskTypeId(9L);
+//                otherProcess.setTaskTypeDetailId(20L);
+//                otherProcess.setContractId(archiveInput.getId());
+//                otherProcess.setContractDetailId(other.getId());
+//                otherProcess.setCompanyId(archiveInput.getCompanyId());
+//                otherProcess.setAmount(item.getOtherAmount());
+//                archiveInputDetailProcesses.add(otherProcess);
+//                archiveInputDetails.add(other);
+//                BizWorkOrder workOrder = new BizWorkOrder();
+//                otherProcess.setId(snowflakeIdWorker.nextId());
+//                workOrder.setContractId(archiveInput.getId());
+//                workOrder.setContractDetailId(other.getId());
+//                workOrder.setCompanyId(archiveInput.getCompanyId());
+//                workOrder.setContractDetailProcessId(otherProcess.getId());
+//                workOrder.setCity(other.getCity());
+//                workOrder.setProvince(other.getProvince());
+//                workOrder.setDistrict(other.getDistrict());
+//                workOrder.setTaskTypeId(8L);
+//                workOrder.setTaskTypeDetailId(20L);
+//                workOrder.setTenantId(tenantId);
+//                workOrder.setWorkOrderNo(String.valueOf(snowflakeIdWorker.nextId()));
+//                workOrder.setType(2);
+//                bizWorkOrders.add(workOrder);
+//            }
+//            successNum++;
+//            successMsg.append("<br/>").append(successNum).append("、订单 ").append(item.getContractNo()).append(" 导入成功");
+//        }
+//        super.saveBatch(archiveInputs);
+//        archiveInputDetailService.saveBatch(archiveInputDetails);
+//        archiveInputDetailProcessService.saveBatch(archiveInputDetailProcesses);
+//        workOrderService.saveBatch(bizWorkOrders);
+//        if (failureNum > 0) {
+//            failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
+//            throw new ServiceException(failureMsg.toString());
+//        } else {
+//            successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
+//        }
+//        return successMsg.toString();
+//    }
+
+    @Override
+    public int removeBinByIds(List<Long> ids) {
+        return bizArchiveInputMapper.removeByIds(ids);
+    }
+}

+ 434 - 0
src/main/java/cn/ezhizao/project/business/standardCpmpany/controller/BizStandardCompanyController.java

@@ -0,0 +1,434 @@
+package cn.ezhizao.project.business.standardCpmpany.controller;
+
+import cn.ezhizao.common.utils.poi.ExcelUtil;
+import cn.ezhizao.framework.aspectj.lang.annotation.Log;
+import cn.ezhizao.framework.aspectj.lang.enums.BusinessType;
+import cn.ezhizao.framework.web.controller.BaseController;
+import cn.ezhizao.framework.web.domain.AjaxResult;
+import cn.ezhizao.framework.web.page.TableDataInfo;
+import cn.ezhizao.project.business.entrust.domain.BizEntrust;
+import cn.ezhizao.project.business.entrust.service.IBizEntrustService;
+import cn.ezhizao.project.business.order.domain.BizArchiveInput;
+import cn.ezhizao.project.business.order.domain.BizArchiveInputDetail;
+import cn.ezhizao.project.business.order.domain.BizArchiveInputDetailProcess;
+import cn.ezhizao.project.business.order.service.IBizArchiveInputDetailProcessService;
+import cn.ezhizao.project.business.order.service.IBizArchiveInputService;
+import cn.ezhizao.project.business.standardCpmpany.domain.BizStandardCompany;
+import cn.ezhizao.project.business.standardCpmpany.service.IBizStandardCompanyService;
+import cn.ezhizao.project.business.workOrder.domain.BizWorkOrder;
+import cn.ezhizao.project.business.workOrder.domain.BizWorkOrderDetail;
+import cn.ezhizao.project.business.workOrder.service.IBizWorkOrderDetailService;
+import cn.ezhizao.project.business.workOrder.service.IBizWorkOrderService;
+import cn.ezhizao.project.system.domain.SysCurrentMonth;
+import cn.ezhizao.project.system.service.ISysCurrentMonthService;
+import cn.ezhizao.project.tenant.domain.Tenant;
+import cn.ezhizao.project.tenant.service.ITenantService;
+import cn.hutool.core.date.DateField;
+import cn.hutool.core.date.DateTime;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.sql.Date;
+import java.time.Instant;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * standardCompanyController
+ *
+ * @author ezhizao
+ * @date 2023-10-30
+ */
+@RestController
+@RequestMapping("/business/standardCompany")
+public class BizStandardCompanyController extends BaseController {
+    @Resource
+    IBizStandardCompanyService bizStandardCompanyService;
+
+    @Resource
+    ISysCurrentMonthService sysCurrentMonthService;
+
+    @Resource
+    IBizEntrustService bizEntrustService;
+
+    @Resource
+    IBizArchiveInputDetailProcessService archiveInputDetailProcessService;
+
+    @Resource
+    IBizArchiveInputService bizArchiveInputService;
+
+    @Resource
+    ITenantService tenantService;
+
+    @Resource
+    IBizWorkOrderDetailService bizWorkOrderDetailService;
+
+    @Resource
+    IBizWorkOrderService bizWorkOrderService;
+
+    /**
+     * 查询standardCompany列表
+     */
+    @PreAuthorize("@ss.hasPermi('business:standardCompany:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(BizStandardCompany bizStandardCompany) throws NoSuchFieldException, IllegalAccessException {
+        setTenantId(bizStandardCompany);
+        startPage();
+        startOrderBy();
+        List<BizStandardCompany> list = bizStandardCompanyService.getList(bizStandardCompany);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出standardCompany列表
+     */
+    @PreAuthorize("@ss.hasPermi('business:standardCompany:export')")
+    @Log(title = "standardCompany", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, BizStandardCompany bizStandardCompany) throws NoSuchFieldException, IllegalAccessException {
+        setTenantId(bizStandardCompany);
+        List<BizStandardCompany> list = bizStandardCompanyService.getList(bizStandardCompany);
+        list.forEach(l -> {
+            l.setZero(l.getIsZero() == 1 ? "是" : "否");
+        });
+        ExcelUtil<BizStandardCompany> util = new ExcelUtil<BizStandardCompany>(BizStandardCompany.class);
+        util.exportExcel(response, list, "standardCompany数据");
+    }
+
+    /**
+     * 生成单次委托
+     */
+    @PreAuthorize("@ss.hasPermi('business:standardCompany:setOneEntrust')")
+    @Log(title = "生成单次委托", businessType = BusinessType.INSERT)
+    @PostMapping("/setOneEntrust")
+    public AjaxResult setOneEntrust(@RequestBody BizArchiveInput archiveInput) throws NoSuchFieldException, IllegalAccessException {
+        List<BizWorkOrder> workOrders = bizWorkOrderService.query().eq("company_id", archiveInput.getCompanyId()).eq("is_stop", 0).list();
+        //查询委托签约合同
+        List<Tenant> tenants = tenantService.getFactoriesId(getTenantId());
+        List<BizWorkOrder> newWorkOrders = new ArrayList<>();
+        boolean bool = true;
+        List<Long> list = new ArrayList<>();
+        for (BizArchiveInputDetail detail : archiveInput.getDetails()) {
+            for (BizArchiveInputDetailProcess process : detail.getProcesses()) {
+                BizWorkOrder workOrder = new BizWorkOrder();
+                workOrder.setNoContract(0);
+                workOrder.setType(2);
+                workOrder.setTenantId(getTenantId());
+                workOrder.setTaskTypeId(detail.getTaskTypeId());
+                workOrder.setTaskTypeDetailId(process.getTaskTypeDetailId());
+                workOrder.setCompanyId(archiveInput.getCompanyId());
+                bizWorkOrderService.save(workOrder);
+                newWorkOrders.add(workOrder);
+                list.add(workOrder.getId());
+            }
+        }
+
+        //如果只有一家工厂,设置委托
+        if (tenants.size() == 1) {
+            bool = addEntrust(list, new java.sql.Date(archiveInput.getFormDate().getTime()), tenants.get(0).getId());
+            newWorkOrders.forEach(bizArchiveInputService::addLoopTasks);
+        }
+        return success(bool);
+    }
+
+    /**
+     * 生成循环委托
+     */
+    @PreAuthorize("@ss.hasPermi('business:standardCompany:setLoopEntrust')")
+    @Log(title = "生成循环委托", businessType = BusinessType.INSERT)
+    @PostMapping("/setLoopEntrust")
+    @Transactional(rollbackFor = Exception.class)
+    public AjaxResult setLoopEntrust(@RequestBody BizWorkOrder order) throws NoSuchFieldException, IllegalAccessException {
+        //查询委托签约合同
+        List<Tenant> tenants = tenantService.getFactoriesId(getTenantId());
+        boolean bool = true;
+        List<Long> list = new ArrayList<>();
+        List<BizWorkOrder> newWorkOrders = new ArrayList<>();
+
+        //生成工单
+        for (BizStandardCompany company : order.getCompanies()) {
+
+            for (Long typeId : order.getTaskTypeIds()) {
+                if (typeId == 1) {
+                    if (company.getIsZero() == null) {
+                        company.setIsZero(order.getIsZero());
+                        bizStandardCompanyService.updateById(company);
+
+                    }
+                    Calendar calendar = Calendar.getInstance();
+                    calendar.setTime(order.getStartMonth());
+                    calendar.add(Calendar.MONTH, -1);
+                    order.setStartMonth(new java.sql.Date(calendar.getTime().getTime()));
+                }
+                BizWorkOrder workOrder = new BizWorkOrder();
+                workOrder.setTenantId(getTenantId());
+                workOrder.setCompanyId(company.getId());
+                workOrder.setTaskTypeId(typeId);
+                workOrder.setIsStop(0);
+                workOrder.setType(1);
+                workOrder.setStartMonth(order.getStartMonth());
+
+                //查询是否存在该期间工单
+                List<BizWorkOrder> workOrders = bizWorkOrderService.selectStarMonthList(workOrder);
+                if (workOrders.size() > 0) {
+                    throw new RuntimeException("已有该期间工单");
+                }
+                workOrder.setStartMonth(null);
+                workOrders = bizWorkOrderService.getList(workOrder);
+                workOrder.setStartMonth(order.getStartMonth());
+                if(typeId == 1){
+
+                }
+                if (workOrders.size() > 0) {
+                    workOrder.setStartMonth(order.getStartMonth());
+                    BizWorkOrder orders = workOrders.get(0);
+                    Long oldCurrentMontn = orders.getStartMonth().getTime();
+                    Long newCurrentMontn = workOrder.getStartMonth().getTime();
+                    //计算时间差
+                    if (newCurrentMontn > oldCurrentMontn) {
+                        long daysBetween = newCurrentMontn - oldCurrentMontn;
+                        daysBetween = daysBetween / (24 * 60 * 60 * 1000);
+                        //时间差大于30天
+                        if (daysBetween > 30) {
+                            BizEntrust entrust = new BizEntrust();
+                            entrust.setWorkOrderId(orders.getId());
+                            entrust.setWorkMonth(new Date(orders.getStartMonth().getTime()));
+                            // 获取已有委托
+                            List<BizEntrust> entrustList = bizEntrustService.getList(entrust);
+                            //如果有委托
+                            if (entrustList.size() > 0) {
+                                Calendar calendar = Calendar.getInstance();
+                                calendar.setTime(order.getStartMonth());
+                                //计算前一个月的日期
+                                calendar.add(Calendar.MONTH, -1);
+                                orders.setEndMonth(calendar.getTime());
+                                bizWorkOrderService.updateById(orders);
+                                bool = bizWorkOrderService.save(workOrder);
+                                BizWorkOrderDetail bizWorkOrderDetail = new BizWorkOrderDetail();
+                                bizWorkOrderDetail.setCompanyId(workOrder.getCompanyId());
+                                bizWorkOrderDetail.setWorkOrderId(workOrder.getId());
+                                bizWorkOrderDetail.setTaskTypeId(workOrder.getTaskTypeId());
+                                bizWorkOrderDetail.setTenantId(workOrder.getTenantId());
+                                bizWorkOrderDetailService.save(bizWorkOrderDetail);
+                            } else {
+                                LocalDateTime localDateTime = LocalDateTime.now();
+                                Instant instant = localDateTime.atZone(ZoneId.systemDefault()).toInstant();
+                                Date date = new Date(Date.from(instant).getTime());
+                                oldCurrentMontn = orders.getStartMonth().getTime();
+                                newCurrentMontn = date.getTime();
+                                daysBetween = newCurrentMontn - oldCurrentMontn;
+                                daysBetween = daysBetween / (24 * 60 * 60 * 1000);
+//                                if (daysBetween > (typeId == 1 ? 60 : 30)) {
+
+                                if (daysBetween >  30) {
+                                    orders.setIsStop(1);
+                                    bizArchiveInputService.stopLoopTasks(orders);
+                                    bizWorkOrderService.saveOrUpdate(orders);
+                                    bool = bizWorkOrderService.save(workOrder);
+                                    newWorkOrders.add(workOrder);
+                                    BizWorkOrderDetail bizWorkOrderDetail = new BizWorkOrderDetail();
+                                    bizWorkOrderDetail.setCompanyId(workOrder.getCompanyId());
+                                    bizWorkOrderDetail.setWorkOrderId(workOrder.getId());
+                                    bizWorkOrderDetail.setTaskTypeId(workOrder.getTaskTypeId());
+                                    bizWorkOrderDetail.setTenantId(workOrder.getTenantId());
+                                    bizWorkOrderDetailService.save(bizWorkOrderDetail);
+                                    list.add(workOrder.getId());
+                                } else {
+                                    Calendar calendar = Calendar.getInstance();
+                                    calendar.setTime(order.getStartMonth());
+                                    //计算前一个月的日期
+                                    calendar.add(Calendar.MONTH, -1);
+                                    orders.setEndMonth(calendar.getTime());
+                                    bizWorkOrderService.updateById(orders);
+                                    bool = bizWorkOrderService.save(workOrder);
+                                    newWorkOrders.add(workOrder);
+                                    list.add(workOrder.getId());
+                                }
+                            }
+                        }
+                    }
+                } else {
+
+                    bool = bizWorkOrderService.save(workOrder);
+
+                    BizWorkOrderDetail bizWorkOrderDetail = new BizWorkOrderDetail();
+                    bizWorkOrderDetail.setCompanyId(workOrder.getCompanyId());
+                    bizWorkOrderDetail.setWorkOrderId(workOrder.getId());
+                    bizWorkOrderDetail.setTaskTypeId(workOrder.getTaskTypeId());
+                    bizWorkOrderDetail.setTenantId(workOrder.getTenantId());
+                    bizWorkOrderDetailService.saveOrUpdate(bizWorkOrderDetail);
+                    list.add(workOrder.getId());
+                    newWorkOrders.add(workOrder);
+                }
+            }
+        }
+        newWorkOrders.forEach(bizArchiveInputService::addLoopTasks);
+
+        //如果只有一家工厂,设置委托
+        if (tenants.size() == 1) {
+            List<SysCurrentMonth> months = sysCurrentMonthService.query().eq("tenant_id", getTenantId()).eq("type", 0).list();
+            Calendar calendar = Calendar.getInstance();
+            // 设置年份
+            calendar.set(Calendar.YEAR, Integer.parseInt(months.get(0).getYear()));
+            // 设置月份为(注意:月份是从0开始的,所以要减1)
+            calendar.set(Calendar.MONTH, Integer.parseInt(months.get(0).getMonth()) - 1);
+            // 设置日期
+            calendar.set(Calendar.DAY_OF_MONTH, 1);
+            Date month = new java.sql.Date(calendar.getTime().getTime());
+            Date newMonth = new java.sql.Date(order.getStartMonth().getTime());
+            int monthDifference=0;
+            //判断时间是否小于当前期间
+            if(newMonth.before(month)){
+                //计算相差月份
+                monthDifference = getMonthDifference(month, newMonth);
+            }
+            if(monthDifference>0){
+                //添加委托
+                for(int i=0;i<=monthDifference;i++){
+                    java.sql.Date workMonth = new java.sql.Date(order.getStartMonth().getTime());
+                    LocalDate localDate = workMonth.toLocalDate();
+                    localDate=localDate.plusMonths(i);
+                    workMonth= Date.valueOf(localDate);
+                    bool = addEntrust(list, workMonth, tenants.get(0).getId());
+                }
+            }else {
+                bool = addEntrust(list, new java.sql.Date(order.getStartMonth().getTime()), tenants.get(0).getId());
+            }
+        }
+
+        return success(bool);
+    }
+
+    /**
+     * 计算两个日期之间的月份差。
+     * 注意:此方法只考虑年份和月份,不考虑日期。
+     * @param date1 第一个日期
+     * @param date2 第二个日期
+     * @return 两个日期之间的月份差
+     */
+    public int getMonthDifference(Date date1, Date date2) {
+        Calendar calendar1 = Calendar.getInstance();
+        calendar1.setTime(date1);
+        Calendar calendar2 = Calendar.getInstance();
+        calendar2.setTime(date2);
+
+        int monthDiff = Math.abs((calendar1.get(Calendar.YEAR) - calendar2.get(Calendar.YEAR)) * 12 +
+                (calendar1.get(Calendar.MONTH) - calendar2.get(Calendar.MONTH)));
+        return monthDiff;
+    }
+
+
+    /**
+     * 获取standardCompany详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('business:standardCompany:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id) {
+        return success(bizStandardCompanyService.getById(id));
+    }
+
+
+    /**
+     * 新增standardCompany
+     */
+    @PreAuthorize("@ss.hasPermi('business:standardCompany:add')")
+    @Log(title = "standardCompany", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody BizStandardCompany bizStandardCompany) throws NoSuchFieldException, IllegalAccessException {
+        setTenantId(bizStandardCompany);
+        return toAjax(bizStandardCompanyService.save(bizStandardCompany));
+    }
+
+
+    /**
+     * 修改standardCompany
+     */
+    @PreAuthorize("@ss.hasPermi('business:standardCompany:edit')")
+    @Log(title = "standardCompany", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody BizStandardCompany bizStandardCompany) throws NoSuchFieldException, IllegalAccessException {
+        setTenantId(bizStandardCompany);
+        return toAjax(bizStandardCompanyService.updateById(bizStandardCompany));
+    }
+
+    /**
+     * 删除standardCompany
+     */
+    @PreAuthorize("@ss.hasPermi('business:standardCompany:remove')")
+    @Log(title = "standardCompany", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable List<Long> ids) {
+        return toAjax(bizStandardCompanyService.removeBatchByIds(ids));
+    }
+
+    /**
+     * 修改负责人
+     */
+    @PreAuthorize("@ss.hasPermi('business:standardCompany:Leader')")
+    @Log(title = "负责人", businessType = BusinessType.UPDATE)
+    @PostMapping("/Leader/{ids}")
+    public AjaxResult updateStandardCompanyLeader(@PathVariable List<Long> ids, @RequestBody Long userId) {
+        return toAjax(bizStandardCompanyService.updateUserId(ids, userId, 0));
+    }
+
+    /**
+     * 修改客服
+     */
+    @PreAuthorize("@ss.hasPermi('business:standardCompany:Adviser')")
+    @Log(title = "客服", businessType = BusinessType.UPDATE)
+    @PostMapping("/Adviser/{ids}")
+    public AjaxResult updateStandardCompanyAdviser(@PathVariable List<Long> ids, @RequestBody Long userId) {
+        return toAjax(bizStandardCompanyService.updateUserId(ids, userId, 1));
+    }
+
+    private boolean addEntrust(List<Long> workOrderId, Date paramWorkMonth, Long toTenantId) {
+
+        BizEntrust entrust = new BizEntrust();
+        entrust.setWorkOrderIds(workOrderId);
+        entrust.setWorkMonth(paramWorkMonth);
+        entrust.setToTenantId(toTenantId);
+
+        // 获取所有已有委托
+        List<BizEntrust> entrustList = bizEntrustService.getList(entrust);
+        // 获取未有委托的工单
+        List<BizWorkOrder> bizWorkOrders = new ArrayList<>();
+        if (entrust.getWorkOrderIds().stream().anyMatch(e -> entrustList.stream().noneMatch(t -> t.getWorkOrderId().equals(e)))) {
+            bizWorkOrders.addAll(bizWorkOrderService.query().in("id", entrust.getWorkOrderIds().stream().filter(e -> entrustList.stream().noneMatch(t -> t.getWorkOrderId().equals(e))).collect(Collectors.toList())).list());
+        }
+        // 修改已有委托的委托信息
+        entrustList.forEach(l -> {
+            l.setToTenantId(entrust.getToTenantId());
+        });
+        // 添加新委托
+        List<BizEntrust> addEntrusts = new ArrayList<>();
+        bizWorkOrders.forEach(l -> {
+            BizEntrust bizEntrust = new BizEntrust();
+            bizEntrust.setWorkOrderId(l.getId());
+            bizEntrust.setCompanyId(l.getCompanyId());
+            bizEntrust.setToTenantId(entrust.getToTenantId());
+            bizEntrust.setTenantId(l.getTenantId());
+            bizEntrust.setFromTenantId(l.getTenantId());
+            bizEntrust.setCurrentMonth(entrust.getWorkMonth());
+
+            if (l.getTaskTypeId() == 1L) {
+                DateTime workMonth = DateTime.of(entrust.getWorkMonth());
+                bizEntrust.setCurrentMonth(workMonth.offsetNew(DateField.MONTH, -1).toSqlDate());
+            } else {
+            }
+            bizEntrust.setWorkMonth(entrust.getWorkMonth());
+            bizEntrust.setTaskTypeId(l.getTaskTypeId());
+            bizEntrust.setTaskTypeDetailId(l.getTaskTypeDetailId());
+            addEntrusts.add(bizEntrust);
+        });
+        // 保存
+        return (entrustList.isEmpty() || bizEntrustService.updateBatchById(entrustList)) && (addEntrusts.isEmpty() || bizEntrustService.saveBatch(addEntrusts));
+    }
+}

+ 384 - 0
src/main/java/cn/ezhizao/project/business/standardCpmpany/domain/BizStandardCompany.java

@@ -0,0 +1,384 @@
+package cn.ezhizao.project.business.standardCpmpany.domain;
+
+import cn.ezhizao.framework.aspectj.lang.annotation.Excel;
+import cn.ezhizao.framework.web.domain.BaseEntity;
+
+import cn.ezhizao.project.business.companyContactor.domain.BizCompanyContactor;
+import cn.ezhizao.project.business.companyFollow.domain.BizCompanyFollowDetail;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.Pattern;
+import javax.validation.constraints.Size;
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * standardCompany对象 biz_company
+ *
+ * @author ezhizao
+ * @date 2023-10-30
+ */
+@Data
+@TableName(value = "biz_company")
+public class BizStandardCompany extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 合作伙伴分类:1、客户;2、供应商;3、外协商 */
+    @ApiModelProperty(value = "合作伙伴分类:1、客户;2、供应商;3、外协商")
+    private String category;
+
+    /** 客户编码 */
+//    @Excel(name = "客户编码")
+    @ApiModelProperty(value = "客户编码")
+    private String code;
+
+    /** 客户名称 */
+    @Excel(name = "客户名称")
+    @ApiModelProperty(value = "客户名称")
+    @Size(min = 0, max = 100)
+    private String name;
+
+    /** 客户简称 */
+//    @Excel(name = "客户简称")
+    @ApiModelProperty(value = "客户简称")
+    @Size(min = 0, max = 50)
+    private String shortName;
+
+    /** 曾用名 */
+//    @Excel(name = "曾用名")
+    @ApiModelProperty(value = "曾用名")
+    private String oldName;
+
+    /** 所有权人 */
+//    @Excel(name = "所有权人")
+    @ApiModelProperty(value = "所有权人")
+    private String owner;
+
+    /** 所有权人ID外键(字典所有权人分类) */
+    @ApiModelProperty(value = "所有权人")
+    private Long ownerId;
+
+    /** 企业电话 */
+//    @Excel(name = "企业电话")
+    @ApiModelProperty(value = "企业电话")
+    private String phone;
+
+    /** 企业邮箱 */
+//    @Excel(name = "企业邮箱")
+    @ApiModelProperty(value = "企业邮箱")
+    private String email;
+
+    /** 联系地址 */
+//    @Excel(name = "联系地址")
+    @ApiModelProperty(value = "联系地址")
+    private String contactAddress;
+
+    /** 客户阶段字典分类外键 */
+    @ApiModelProperty(value = "联系地址")
+    private Long stageId;
+
+    /** 等级,对应的是数据字典外键 */
+    @ApiModelProperty(value = "联系地址")
+    private Long companyLevelId;
+
+    /** 客户来源:与合同来源共用一个数据源 */
+    @ApiModelProperty(value = "联系地址")
+    private Long sourceCategoryId;
+
+    /** 客户来源 */
+//    @Excel(name = "客户来源")
+    @ApiModelProperty(value = "客户来源")
+    private String source;
+
+    /** 客户来源: */
+    @ApiModelProperty(value = "客户来源")
+    private Long sourceId;
+
+    /** 企业类型 */
+//    @Excel(name = "企业类型")
+    @ApiModelProperty(value = "企业类型")
+    private String type;
+
+    /** 企业类型字典分类外键 */
+    @ApiModelProperty(value = "企业类型")
+    private Long typeId;
+
+    /** 社会信用代码 */
+    @Excel(name = "税号")
+    @ApiModelProperty(value = "社会统一信用代码")
+    @Pattern(regexp = "^$|^. {18}$", message = "社会统一信用代码必须为18位")
+    private String socialCreditCode;
+
+    /** 主营业务 */
+//    @Excel(name = "主营业务")
+    @ApiModelProperty(value = "主营业务")
+    private String mainBusiness;
+
+    /** 主营行业字典分类外键 */
+    @ApiModelProperty(value = "主营业务")
+    private Long mainBusinessId;
+
+    /** 法定代表人 */
+//    @Excel(name = "法定代表人")
+    @ApiModelProperty(value = "法定代表人")
+    private String legalRepresentative;
+
+    /** 成立日期 */
+//    @Excel(name = "成立日期")
+    @ApiModelProperty(value = "成立日期")
+    @Pattern(regexp = "^\\d{4}-\\d{2}-\\d{2}$")
+    private String foundationDate;
+
+    /** 出执照日期 */
+//    @Excel(name = "出执照日期")
+    @ApiModelProperty(value = "出执照日期")
+    private String licenceDate;
+
+    /** 营业开始时间 */
+//    @Excel(name = "营业开始时间")
+    @ApiModelProperty(value = "营业开始时间")
+    private String businessStartDate;
+
+    /** 营业结束时间 */
+//    @Excel(name = "营业结束时间")
+    @ApiModelProperty(value = "营业结束时间")
+    private String businessEndDate;
+
+    /** 长期有效否 */
+//    @Excel(name = "长期有效否")
+    @ApiModelProperty(value = "长期有效否")
+    private Integer isPermanentlyEffective;
+
+    /** 注册资金 */
+//    @Excel(name = "注册资金")
+    @ApiModelProperty(value = "注册资金")
+    private String registerMoney;
+
+    /** 注册资金单位 */
+//    @Excel(name = "注册资金单位")
+    @ApiModelProperty(value = "注册资金单位")
+    private String registerMoneyUnit;
+
+    /** 注册资金数据字典id */
+    @ApiModelProperty(value = "注册资金单位")
+    private Long registerMoneyUnitId;
+
+    /** 注册省份编码 */
+//    @Excel(name = "注册省份编码")
+    @ApiModelProperty(value = "注册省份编码")
+    private String provinceCode;
+
+    /** 省 */
+    @Excel(name = "省")
+    @ApiModelProperty(value = "省")
+    private String province;
+
+    /** 注册城市编码 */
+//    @Excel(name = "注册城市编码")
+    @ApiModelProperty(value = "注册城市编码")
+    private String cityCode;
+
+    /** 市 */
+    @Excel(name = "市")
+    @ApiModelProperty(value = "市")
+    private String city;
+
+    /** 注册行政区编码 */
+//    @Excel(name = "注册行政区编码")
+    @ApiModelProperty(value = "注册行政区编码")
+    private String districtCode;
+
+    /** 区 */
+    @Excel(name = "区")
+    @ApiModelProperty(value = "区")
+    private String district;
+
+    /** 注册详细地址 */
+//    @Excel(name = "注册详细地址")
+    @ApiModelProperty(value = "注册详细地址")
+    private String address;
+
+    /** 经营范围 */
+//    @Excel(name = "经营范围")
+    @ApiModelProperty(value = "经营范围")
+    private String businessField;
+
+    /** 纳税类型 */
+    @Excel(name = "纳税类型")
+    @ApiModelProperty(value = "纳税类型")
+    private String taxType;
+
+    /** 纳税类型字典分类ID外键 */
+    @ApiModelProperty(value = "纳税类型")
+    private Long taxTypeId;
+
+    /** 报税类别ID外键字典 */
+    @ApiModelProperty(value = "纳税类型")
+    private Long taxDeclarationCategoryId;
+
+    /** 是否零申报 */
+//    @Excel(name = "是否零申报")
+    @ApiModelProperty(value = "是否零申报")
+    private Integer isZero;
+
+    /** 税盘ID外键字典 */
+    @ApiModelProperty(value = "是否零申报")
+    private Long taxDishId;
+
+    /** 主管税务机关 */
+//    @Excel(name = "主管税务机关")
+    @ApiModelProperty(value = "主管税务机关")
+    private String competentTaxAuthority;
+
+    /** 税务专管员 */
+//    @Excel(name = "税务专管员")
+    @ApiModelProperty(value = "税务专管员")
+    private String taxCollectorName;
+
+    /** 专管员电话 */
+//    @Excel(name = "专管员电话")
+    @ApiModelProperty(value = "专管员电话")
+    private String taxCollectorPhone;
+
+    /** 核税月份 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+//    @Excel(name = "核税月份", width = 30, dateFormat = "yyyy-MM-dd")
+    @ApiModelProperty(value = "核税月份")
+    private Date taxMonth;
+
+    /** 开户行 */
+//    @Excel(name = "开户行")
+    @ApiModelProperty(value = "开户行")
+    private String openingBank;
+
+    /** 银行账户 */
+//    @Excel(name = "银行账户")
+    @ApiModelProperty(value = "银行账户")
+    private String bankAccount;
+
+    /** 账套外键 */
+    @ApiModelProperty(value = "银行账户")
+    private Long accountSetsId;
+
+    /** 主程序账套外键 */
+    @ApiModelProperty(value = "系统外键")
+    private Long tenantId;
+
+    /** 年收入 */
+    @Excel(name = "年收入")
+    @ApiModelProperty(value = "年收入")
+    private String annualIncome;
+
+    /** 政务网账号 */
+//    @Excel(name = "政务网账号")
+    @ApiModelProperty(value = "政务网账号")
+    private String governmentAccountNo;
+
+    /** 政务网密码 */
+//    @Excel(name = "政务网密码")
+    @ApiModelProperty(value = "政务网密码")
+    private String governmentPassword;
+
+    /** 社保账号 */
+//    @Excel(name = "社保账号")
+    @ApiModelProperty(value = "社保账号")
+    private String socialSecurityAccountNo;
+
+    /** 社保密码 */
+//    @Excel(name = "社保密码")
+    @ApiModelProperty(value = "社保密码")
+    private String socialSecurityPassword;
+
+    /** 用工密码 */
+//    @Excel(name = "用工密码")
+    @ApiModelProperty(value = "用工密码")
+    private String employeePassword;
+
+    /** 公积金密码 */
+//    @Excel(name = "公积金密码")
+    @ApiModelProperty(value = "公积金密码")
+    private String housingFundPassword;
+
+    /** 公积金单位账号 */
+//    @Excel(name = "公积金单位账号")
+    @ApiModelProperty(value = "公积金单位账号")
+    private String housingFundUnitAccount;
+
+    /** 公积金划款密码 */
+//    @Excel(name = "公积金划款密码")
+    @ApiModelProperty(value = "公积金划款密码")
+    private String housingFundDeductionPassword;
+
+    /** 征收方式 */
+    @Excel(name = "征收方式")
+    @ApiModelProperty(value = "征收方式")
+    private String collectionMethod;
+
+    /** 定额金额 */
+    @Excel(name = "定额金额")
+    @ApiModelProperty(value = "定额金额")
+    private BigDecimal quotaAmount;
+
+    /** 窗口现金交 */
+//    @Excel(name = "窗口现金交")
+    @ApiModelProperty(value = "窗口现金交")
+    private Integer isPayOnWindow;
+
+    /** 初次社保信息保存 */
+//    @Excel(name = "初次社保信息保存")
+    @ApiModelProperty(value = "初次社保信息保存")
+    private Integer isFirstSocialSecurity;
+
+    /** 初次公积金信息保存 */
+//    @Excel(name = "初次公积金信息保存")
+    @ApiModelProperty(value = "初次公积金信息保存")
+    private Integer isFirstHousingFund;
+
+
+    @ApiModelProperty(value = "跟进记录")
+    @TableField(exist = false)
+    private List<BizCompanyFollowDetail> followDetails;
+
+    @ApiModelProperty("客户联系人")
+    @TableField(exist = false)
+    private List<BizCompanyContactor> contactors;
+
+    @TableField(exist = false)
+//    @Excel(name = "来源类型")
+    private String sourceCategoryName;
+
+    @TableField(exist = false)
+//    @Excel(name="来源名称")
+    private String sourceName;
+
+
+    @ApiModelProperty("负责人")
+    private Long leaderId;
+    @ApiModelProperty("客服")
+    private Long adviserId;
+
+    /** 负责人名称 */
+    @Excel(name = "是否零申报")
+    @TableField(exist = false)
+    private String zero;
+
+    /** 负责人名称 */
+    @Excel(name = "负责人")
+    @TableField(exist = false)
+    private String leaderName;
+
+    /** 客服名称 */
+    @Excel(name = "客服")
+    @TableField(exist = false)
+    private String adviserName;
+
+
+
+
+}

+ 46 - 0
src/main/java/cn/ezhizao/project/business/standardCpmpany/mapper/BizStandardCompanyMapper.java

@@ -0,0 +1,46 @@
+package cn.ezhizao.project.business.standardCpmpany.mapper;
+
+import cn.ezhizao.project.business.standardCpmpany.domain.BizStandardCompany;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+import java.util.List;
+
+
+/**
+ * standardCompanyMapper接口
+ *
+ * @author ezhizao
+ * @date 2023-10-30
+ */
+public interface BizStandardCompanyMapper extends BaseMapper<BizStandardCompany>
+{
+    /**
+     * 查询standardCompany列表
+     *
+     * @param bizStandardCompany standardCompany
+     * @return standardCompany集合
+     */
+    public List<BizStandardCompany> getList(BizStandardCompany bizStandardCompany);
+
+    /**
+     * 物理删除
+     * @param bizStandardCompany
+     * @return 删除结果
+     */
+    public int physicalDelete(BizStandardCompany bizStandardCompany);
+
+    /**
+     * 修改负责人
+     * */
+    int updateLeaderId(Long id,Long userId );
+
+    /**
+     * 修改负责人
+     * */
+    int updateAdviserId(Long id,Long userId );
+
+    /**
+     * 根据客服或负责人ID 查询对应姓名
+     * */
+    String getUserById(Long id);
+}

+ 51 - 0
src/main/java/cn/ezhizao/project/business/standardCpmpany/service/IBizStandardCompanyService.java

@@ -0,0 +1,51 @@
+package cn.ezhizao.project.business.standardCpmpany.service;
+
+import cn.ezhizao.project.business.standardCpmpany.domain.BizStandardCompany;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+/**
+ * standardCompanyService接口
+ *
+ * @author ezhizao
+ * @date 2023-10-30
+ */
+public interface IBizStandardCompanyService extends IService<BizStandardCompany>
+{
+
+    /**
+     * 查询 主键 为传入参数的客户
+     * @param id company.id
+     * @return 客户信息
+     */
+    public BizStandardCompany getById(Long id);
+
+    /**
+     * 查询standardCompany列表
+     *
+     * @param bizStandardCompany standardCompany
+     * @return standardCompany集合
+     */
+    public List<BizStandardCompany> getList(BizStandardCompany bizStandardCompany);
+
+    /**
+     * 物理删除
+     * @param bizStandardCompany
+     * @return 删除结果
+     */
+    public int physicalDelete(BizStandardCompany bizStandardCompany);
+
+
+    /**
+     * 修改客服
+     * @param ids
+     * @param userId
+     * @param index
+     * @return
+     */
+    boolean updateUserId(List<Long> ids,Long userId,int index);
+
+
+
+}

+ 104 - 0
src/main/java/cn/ezhizao/project/business/standardCpmpany/service/impl/BizStandardCompanyServiceImpl.java

@@ -0,0 +1,104 @@
+package cn.ezhizao.project.business.standardCpmpany.service.impl;
+
+import cn.ezhizao.project.business.company.mapper.BizCompanyMapper;
+import cn.ezhizao.project.business.companyContactor.domain.BizCompanyContactor;
+import cn.ezhizao.project.business.companyContactor.mapper.BizCompanyContactorMapper;
+import cn.ezhizao.project.business.companyFollow.domain.BizCompanyFollowDetail;
+import cn.ezhizao.project.business.companyFollow.mapper.BizCompanyFollowDetailMapper;
+import cn.ezhizao.project.business.standardCpmpany.domain.BizStandardCompany;
+import cn.ezhizao.project.business.standardCpmpany.mapper.BizStandardCompanyMapper;
+import cn.ezhizao.project.business.standardCpmpany.service.IBizStandardCompanyService;
+import cn.ezhizao.project.system.domain.SysUser;
+import cn.ezhizao.project.system.mapper.SysUserMapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import javax.validation.Validator;
+import java.util.List;
+
+/**
+ * standardCompanyService业务层处理
+ *
+ * @author ezhizao
+ * @date 2023-10-30
+ */
+@Service
+public class BizStandardCompanyServiceImpl  extends ServiceImpl<BizStandardCompanyMapper, BizStandardCompany> implements IBizStandardCompanyService
+{
+    @Resource
+    private BizStandardCompanyMapper bizStandardCompanyMapper;
+    @Resource
+    private BizCompanyFollowDetailMapper bizCompanyFollowDetailMapper;
+    @Resource
+    private BizCompanyContactorMapper bizCompanyContactorMapper;
+    @Resource
+    private BizCompanyMapper bizCompanyMapper;
+    @Resource
+    private SysUserMapper sysUserMapper;
+
+    @Resource
+    private Validator validator;
+
+
+    @Override
+    public BizStandardCompany getById(Long id) {
+        BizStandardCompany company = super.getById(id);
+        BizCompanyFollowDetail condition = new BizCompanyFollowDetail();
+        condition.setCompanyId(id);
+//        List<BizCompanyFollowDetail> followDetails = bizCompanyFollowDetailMapper.getList(condition);
+        SysUser user = sysUserMapper.selectUserById(company.getLeaderId());
+        company.setLeaderName(user!=null?user.getUserName():"");
+        user =sysUserMapper.selectUserById(company.getAdviserId());
+        company.setAdviserName(user!=null?user.getUserName():"");
+        BizCompanyContactor contactorCondition = new BizCompanyContactor();
+        contactorCondition.setCompanyId(id);
+//        List<BizCompanyContactor> contactors = bizCompanyContactorMapper.getList(contactorCondition);
+//        company.setContactors(contactors);
+//        company.setFollowDetails(followDetails);
+        return company;
+    }
+
+    /**
+     * 查询standardCompany列表
+     *
+     * @param bizStandardCompany standardCompany
+     * @return standardCompany
+     */
+    @Override
+    public List<BizStandardCompany> getList(BizStandardCompany bizStandardCompany)
+    {
+        List<BizStandardCompany> list=bizStandardCompanyMapper.getList(bizStandardCompany);
+        for (BizStandardCompany biz: list) {
+            biz.setAdviserName(bizStandardCompanyMapper.getUserById(biz.getAdviserId()));
+            biz.setLeaderName(bizStandardCompanyMapper.getUserById(biz.getLeaderId()));
+        }
+        return list;
+    }
+
+    @Override
+    public boolean updateUserId(List<Long> ids, Long userId ,int index)
+    {
+        for (Long id:ids){
+            int num;
+            if(index==0)
+                num=bizStandardCompanyMapper.updateLeaderId(id,userId);
+            else
+                num=bizStandardCompanyMapper.updateAdviserId(id,userId);
+            if(num==0){
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /**
+     * 物理删除
+     * @param bizStandardCompany
+     * @return 删除结果
+     */
+    @Override
+    public int physicalDelete(BizStandardCompany bizStandardCompany){ return bizStandardCompanyMapper.physicalDelete(bizStandardCompany); };
+
+
+}

+ 75 - 9
src/main/java/cn/ezhizao/project/business/workOrder/controller/WorkOrderCurrentController.java

@@ -10,6 +10,7 @@ import cn.ezhizao.framework.web.page.TableDataInfo;
 import cn.ezhizao.project.business.entrust.domain.BizEntrust;
 import cn.ezhizao.project.business.entrust.service.IBizEntrustService;
 import cn.ezhizao.project.business.workOrder.domain.BizWorkOrder;
+import cn.ezhizao.project.business.workOrder.domain.BizWorkOrderExport;
 import cn.ezhizao.project.business.workOrder.service.IBizWorkOrderService;
 import cn.ezhizao.project.system.domain.SysCurrentMonth;
 import cn.ezhizao.project.system.service.ISysCurrentMonthService;
@@ -80,7 +81,6 @@ public class WorkOrderCurrentController extends BaseController {
     @PreAuthorize("@ss.hasPermi('business:entrust:workOrder:current:list')")
     @GetMapping("/listForFactory")
     public TableDataInfo listForFactory(BizWorkOrder bizWorkOrder) throws NoSuchFieldException, IllegalAccessException {
-//        setTenantId(bizWorkOrder);
         bizWorkOrder.setToTenantId(getTenantId());
         startPage();
         bizWorkOrder.setIsStop(0);
@@ -100,6 +100,7 @@ public class WorkOrderCurrentController extends BaseController {
             return getDataTable(list);
         }
     }
+
     @PreAuthorize("@ss.hasPermi('business:entrust:workOrder:current:list')")
     @GetMapping("/checkCurrent")
     public AjaxResult checkCurrent() {
@@ -229,6 +230,22 @@ public class WorkOrderCurrentController extends BaseController {
 
         // 获取上月的委托
         List<BizEntrust> entrusts = bizEntrustService.query().eq("tenant_id", getTenantId()).eq("work_month", nextMonthDate.toSqlDate()).list();
+        List<BizEntrust> entr = entrusts;
+        //将到截至月的委托去掉
+        for (BizEntrust b : entr) {
+            List<BizWorkOrder> workOrder = bizWorkOrderService.query().eq("id", b.getWorkOrderId()).eq("is_stop", 0).list();
+            Calendar calendar = Calendar.getInstance();
+            // 设置年份
+            calendar.set(Calendar.YEAR, Integer.parseInt(months.get(0).getYear()));
+            // 设置月份为(注意:月份是从0开始的,所以要减1)
+            calendar.set(Calendar.MONTH, Integer.parseInt(months.get(0).getMonth()) - 1);
+            // 设置日期
+            calendar.set(Calendar.DAY_OF_MONTH, 1);
+            Date currentMonthDate = new java.sql.Date(calendar.getTime().getTime());
+            if (currentMonthDate == workOrder.get(0).getEndMonth()) {
+                entrusts.removeIf(s -> s.getWorkOrderId().equals(b.getWorkOrderId()));
+            }
+        }
         entrusts.forEach(l -> {
             DateTime currentWorkMonth = DateTime.of(l.getWorkMonth());
             DateTime currentMonthDate = DateTime.of(l.getCurrentMonth());
@@ -271,22 +288,71 @@ public class WorkOrderCurrentController extends BaseController {
     }
 
     /**
-     * 导出委托列表
+     * 导出本月工单
      */
     @PreAuthorize("@ss.hasPermi('business:entrust:workOrder:current:export')")
-    @Log(title = "委托", businessType = BusinessType.EXPORT)
+    @Log(title = "本月工单", businessType = BusinessType.EXPORT)
     @PostMapping("/export")
-    public void export(HttpServletResponse response, BizEntrust bizEntrust) throws NoSuchFieldException, IllegalAccessException {
-        setTenantId(bizEntrust);
-        List<BizEntrust> list = bizEntrustService.getList(bizEntrust);
-        ExcelUtil<BizEntrust> util = new ExcelUtil<BizEntrust>(BizEntrust.class);
-        util.exportExcel(response, list, "委托数据");
+    public void export(HttpServletResponse response, BizWorkOrder bizWorkOrder) throws NoSuchFieldException, IllegalAccessException {
+        if (bizWorkOrder.getToTenantId() == null) {
+            setTenantId(bizWorkOrder);
+        }
+        startPage();
+        startOrderBy();
+        bizWorkOrder.setIsStop(0);
+        List<BizWorkOrder> list = bizWorkOrderService.getList(bizWorkOrder);
+        List<BizWorkOrderExport> listExport = new ArrayList<>();
+
+        List<SysCurrentMonth> months = sysCurrentMonthService.query().eq("tenant_id", getTenantId()).eq("type", 0).list();
+        if (months.isEmpty()) {
+            list = new ArrayList<>();
+            if (bizWorkOrder.getTenantId() == null) {
+                ExcelUtil<BizWorkOrderExport> util = new ExcelUtil<BizWorkOrderExport>(BizWorkOrderExport.class);
+                util.exportExcel(response, listExport, "本月工单");
+            } else {
+                ExcelUtil<BizWorkOrder> util = new ExcelUtil<BizWorkOrder>(BizWorkOrder.class);
+                util.exportExcel(response, list, "本月工单");
+            }
+
+        } else {
+            BizEntrust bizEntrust = new BizEntrust();
+            bizEntrust.setWorkOrderIds(list.stream().map(BizWorkOrder::getId).collect(Collectors.toList()));
+            bizEntrust.setWorkMonth(DateTime.of(months.get(0).getYear() + "-" + months.get(0).getMonth() + "-01", "yyyy-MM-dd").toSqlDate());
+            List<BizEntrust> entrusts = bizEntrustService.getList(bizEntrust);
+            list.forEach(l -> {
+                l.setEntrust(entrusts.stream().filter(v -> v.getWorkOrderId().equals(l.getId())).findFirst().orElse(null));
+                l.setTypeName(l.getType() == 1 ? "循环工单" : "代办工单");
+                l.setExecutor(l.getEntrust() == null ? l.getServiceName() : l.getEntrust().getToAccountName());
+                if (bizWorkOrder.getTenantId() == null) {
+                    BizWorkOrderExport export = new BizWorkOrderExport();
+                    export.setCompanyName(l.getCompanyName());
+                    export.setFromCompanyName(l.getFromCompanyName());
+                    export.setSocialCreditCode(l.getSocialCreditCode());
+                    export.setTypeName(l.getTypeName());
+                    export.setTaskTypeName(l.getTaskTypeName());
+                    export.setStartMonth(l.getStartMonth());
+                    export.setEndMonth(l.getEndMonth());
+                    export.setMonthNum(l.getMonthNum());
+                    export.setExecutor(l.getExecutor());
+                    listExport.add(export);
+                }
+            });
+
+            if (bizWorkOrder.getTenantId() == null) {
+                ExcelUtil<BizWorkOrderExport> util = new ExcelUtil<BizWorkOrderExport>(BizWorkOrderExport.class);
+                util.exportExcel(response, listExport, "本月工单");
+            } else {
+                ExcelUtil<BizWorkOrder> util = new ExcelUtil<BizWorkOrder>(BizWorkOrder.class);
+                util.exportExcel(response, list, "本月工单");
+            }
+        }
     }
 
     @PreAuthorize("@ss.hasPermi('business:entrust:workOrder:current:edit')")
     @GetMapping("/getFactories")
     public AjaxResult getFactories() {
-        List<Tenant> tenants = tenantService.getFactories();
+
+        List<Tenant> tenants = tenantService.getFactoriesId(getTenantId());
         return success(tenants);
     }
 }

+ 68 - 0
src/main/java/cn/ezhizao/project/business/workOrder/controller/WorkOrderNextController.java

@@ -1,11 +1,15 @@
 package cn.ezhizao.project.business.workOrder.controller;
 
+import cn.ezhizao.common.utils.poi.ExcelUtil;
+import cn.ezhizao.framework.aspectj.lang.annotation.Log;
+import cn.ezhizao.framework.aspectj.lang.enums.BusinessType;
 import cn.ezhizao.framework.web.controller.BaseController;
 import cn.ezhizao.framework.web.domain.AjaxResult;
 import cn.ezhizao.framework.web.page.TableDataInfo;
 import cn.ezhizao.project.business.entrust.domain.BizEntrust;
 import cn.ezhizao.project.business.entrust.service.IBizEntrustService;
 import cn.ezhizao.project.business.workOrder.domain.BizWorkOrder;
+import cn.ezhizao.project.business.workOrder.domain.BizWorkOrderExport;
 import cn.ezhizao.project.business.workOrder.service.IBizWorkOrderService;
 import cn.ezhizao.project.system.domain.SysCurrentMonth;
 import cn.ezhizao.project.system.service.ISysCurrentMonthService;
@@ -17,6 +21,7 @@ import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -124,6 +129,69 @@ public class WorkOrderNextController extends BaseController {
         return toAjax((entrustList.isEmpty() || bizEntrustService.updateBatchById(entrustList)) && (addEntrusts.isEmpty() || bizEntrustService.saveBatch(addEntrusts)));
     }
 
+    /**
+     * 导出下月工单列表
+     */
+    @PreAuthorize("@ss.hasPermi('business:entrust:workOrder:next:export')")
+    @Log(title = "下月工单", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, BizWorkOrder bizWorkOrder) throws NoSuchFieldException, IllegalAccessException {
+        if (bizWorkOrder.getToTenantId() == null) {
+            setTenantId(bizWorkOrder);
+        }
+
+        startPage();
+        startOrderBy();
+        bizWorkOrder.setIsStop(0);
+        List<BizWorkOrder> list = bizWorkOrderService.getList(bizWorkOrder);
+        List<BizWorkOrderExport> listExport = new ArrayList<>();
+
+        List<SysCurrentMonth> months = sysCurrentMonthService.query().eq("tenant_id", getTenantId()).eq("type", 1).list();
+        if (months.isEmpty()) {
+            list = new ArrayList<>();
+            if (bizWorkOrder.getTenantId() == null) {
+                ExcelUtil<BizWorkOrderExport> util = new ExcelUtil<BizWorkOrderExport>(BizWorkOrderExport.class);
+                util.exportExcel(response, listExport, "下月工单");
+            } else {
+                ExcelUtil<BizWorkOrder> util = new ExcelUtil<BizWorkOrder>(BizWorkOrder.class);
+                util.exportExcel(response, list, "下月工单");
+            }
+
+        } else {
+            BizEntrust bizEntrust = new BizEntrust();
+            bizEntrust.setWorkOrderIds(list.stream().map(BizWorkOrder::getId).collect(Collectors.toList()));
+            bizEntrust.setWorkMonth(DateTime.of(months.get(0).getYear() + "-" + months.get(0).getMonth() + "-01", "yyyy-MM-dd").toSqlDate());
+            List<BizEntrust> entrusts = bizEntrustService.getList(bizEntrust);
+            list.forEach(l -> {
+                l.setEntrust(entrusts.stream().filter(v -> v.getWorkOrderId().equals(l.getId())).findFirst().orElse(null));
+                l.setTypeName(l.getType() == 1 ? "循环工单" : "代办工单");
+                l.setExecutor(l.getEntrust() == null ? l.getServiceName() : l.getEntrust().getToAccountName());
+                if (bizWorkOrder.getTenantId() == null) {
+                    BizWorkOrderExport export = new BizWorkOrderExport();
+                    export.setCompanyName(l.getCompanyName());
+                    export.setFromCompanyName(l.getFromCompanyName());
+                    export.setSocialCreditCode(l.getSocialCreditCode());
+                    export.setTypeName(l.getTypeName());
+                    export.setTaskTypeName(l.getTaskTypeName());
+                    export.setStartMonth(l.getStartMonth());
+                    export.setEndMonth(l.getEndMonth());
+                    export.setMonthNum(l.getMonthNum());
+                    export.setExecutor(l.getExecutor());
+                    listExport.add(export);
+                }
+            });
+
+            if (bizWorkOrder.getTenantId() == null) {
+                ExcelUtil<BizWorkOrderExport> util = new ExcelUtil<BizWorkOrderExport>(BizWorkOrderExport.class);
+                util.exportExcel(response, listExport, "下月工单");
+            } else {
+                ExcelUtil<BizWorkOrder> util = new ExcelUtil<BizWorkOrder>(BizWorkOrder.class);
+                util.exportExcel(response, list, "下月工单");
+            }
+        }
+
+    }
+
     @PreAuthorize("@ss.hasPermi('business:entrust:workOrder:next:edit')")
     @PostMapping("/delEntrust")
     public AjaxResult delEntrust(@RequestBody BizEntrust bizEntrust) {

+ 77 - 9
src/main/java/cn/ezhizao/project/business/workOrder/controller/WorkOrderOnceController.java

@@ -10,6 +10,8 @@ import cn.ezhizao.framework.web.page.TableDataInfo;
 import cn.ezhizao.project.business.entrust.domain.BizEntrust;
 import cn.ezhizao.project.business.entrust.service.IBizEntrustService;
 import cn.ezhizao.project.business.workOrder.domain.BizWorkOrder;
+import cn.ezhizao.project.business.workOrder.domain.BizWorkOrderOnce;
+import cn.ezhizao.project.business.workOrder.domain.BizWorkOrderOnceExport;
 import cn.ezhizao.project.business.workOrder.service.IBizWorkOrderService;
 import cn.ezhizao.project.system.domain.SysCurrentMonth;
 import cn.ezhizao.project.system.service.ISysCurrentMonthService;
@@ -51,7 +53,7 @@ public class WorkOrderOnceController extends BaseController {
     /**
      * 查询工单信息列表
      */
-    @PreAuthorize("@ss.hasPermi('business:entrust:workOrder:current:list')")
+    @PreAuthorize("@ss.hasPermi('business:entrust:workOrder:once:list')")
     @GetMapping("/list")
     public TableDataInfo list(BizWorkOrder bizWorkOrder) throws NoSuchFieldException, IllegalAccessException {
         setTenantId(bizWorkOrder);
@@ -183,16 +185,82 @@ public class WorkOrderOnceController extends BaseController {
 
 
     /**
-     * 导出委托列表
+     * 导出单次委托
      */
-    @PreAuthorize("@ss.hasPermi('business:entrust:workOrder:current:export')")
-    @Log(title = "委托", businessType = BusinessType.EXPORT)
+    @PreAuthorize("@ss.hasPermi('business:entrust:workOrder:once:export')")
+    @Log(title = "单次委托", businessType = BusinessType.EXPORT)
     @PostMapping("/export")
-    public void export(HttpServletResponse response, BizEntrust bizEntrust) throws NoSuchFieldException, IllegalAccessException {
-        setTenantId(bizEntrust);
-        List<BizEntrust> list = bizEntrustService.getList(bizEntrust);
-        ExcelUtil<BizEntrust> util = new ExcelUtil<BizEntrust>(BizEntrust.class);
-        util.exportExcel(response, list, "委托数据");
+    public void export(HttpServletResponse response, BizWorkOrder bizWorkOrder) throws NoSuchFieldException, IllegalAccessException {
+        //如果有ToTenantId,说明是工厂版导出,不设置TenantId
+        if(bizWorkOrder.getToTenantId()==null){
+            setTenantId(bizWorkOrder);
+        }
+        startPage();
+        startOrderBy();
+        bizWorkOrder.setIsStop(0);
+        //查询单次委托列表
+        List<BizWorkOrder> list = bizWorkOrderService.getList(bizWorkOrder);
+        //非工厂版实体类集合
+        List<BizWorkOrderOnceExport> listExport = new ArrayList<>();
+        //工厂版实体类集合
+        List<BizWorkOrderOnce> listOnce = new ArrayList<>();
+        //查询当前期间
+        List<SysCurrentMonth> months = sysCurrentMonthService.query().eq("tenant_id", getTenantId()).eq("type", 0).list();
+        //如果没设置当前期间
+        if(months.isEmpty()){
+            if(bizWorkOrder.getTenantId()!=null){
+                ExcelUtil<BizWorkOrderOnceExport> util = new ExcelUtil<BizWorkOrderOnceExport>(BizWorkOrderOnceExport.class);
+                util.exportExcel(response, listExport, "单次工单");
+            }else{
+                ExcelUtil<BizWorkOrderOnce> util = new ExcelUtil<BizWorkOrderOnce>(BizWorkOrderOnce.class);
+                util.exportExcel(response, listOnce, "单次工单");
+            }
+
+        }else {
+            //查询委托信息
+            BizEntrust bizEntrust = new BizEntrust();
+            bizEntrust.setWorkOrderIds(list.stream().map(BizWorkOrder::getId).collect(Collectors.toList()));
+            List<BizEntrust> entrusts = bizEntrustService.getList(bizEntrust);
+
+            list.forEach(l -> {
+                //设置委托信息
+                l.setEntrust(entrusts.stream().filter(v -> v.getWorkOrderId().equals(l.getId())).findFirst().orElse(null));
+                //工单类型
+                l.setTypeName(l.getType()==1?"循环工单":"代办工单");
+                //项目
+                l.setTaskTypeName((l.getNoContract() == 1 ?l.getRemark() : "")+l.getTaskTypeName()+(l.getTaskTypeDetailName()!=null?"-"+l.getTaskTypeDetailName():""));
+                //负责人
+                l.setExecutor(l.getEntrust() == null ? l.getServiceName() : l.getEntrust().getToAccountName());
+
+                BizWorkOrderOnceExport export = new BizWorkOrderOnceExport();
+                export.setCompanyName(l.getCompanyName());
+                export.setSocialCreditCode(l.getSocialCreditCode());
+                export.setTypeName(l.getTypeName());
+                export.setTaskTypeName(l.getTaskTypeName());
+                export.setExecutor(l.getExecutor());
+                listExport.add(export);
+
+                //工厂版导出数据
+                if(bizWorkOrder.getTenantId()==null){
+                    BizWorkOrderOnce once=new BizWorkOrderOnce();
+                    once.setCompanyName(l.getCompanyName());
+                    once.setSocialCreditCode(l.getSocialCreditCode());
+                    once.setTypeName(l.getTypeName());
+                    once.setTaskTypeName(l.getTaskTypeName());
+                    once.setExecutor(l.getExecutor());
+                    once.setFromCompanyName(l.getFromCompanyName());
+                    listOnce.add(once);
+                }
+            });
+
+            if(bizWorkOrder.getTenantId()!=null){
+                ExcelUtil<BizWorkOrderOnceExport> util = new ExcelUtil<BizWorkOrderOnceExport>(BizWorkOrderOnceExport.class);
+                util.exportExcel(response, listExport, "单次工单");
+            }else{
+                ExcelUtil<BizWorkOrderOnce> util = new ExcelUtil<BizWorkOrderOnce>(BizWorkOrderOnce.class);
+                util.exportExcel(response, listOnce, "单次工单");
+            }
+        }
     }
 
     @PreAuthorize("@ss.hasPermi('business:entrust:workOrder:current:addEntrust')")

+ 38 - 16
src/main/java/cn/ezhizao/project/business/workOrder/domain/BizWorkOrder.java

@@ -3,6 +3,7 @@ package cn.ezhizao.project.business.workOrder.domain;
 import cn.ezhizao.framework.aspectj.lang.annotation.Excel;
 import cn.ezhizao.framework.web.domain.BaseEntity;
 import cn.ezhizao.project.business.entrust.domain.BizEntrust;
+import cn.ezhizao.project.business.standardCpmpany.domain.BizStandardCompany;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
@@ -32,11 +33,11 @@ public class BizWorkOrder extends BaseEntity
     @ApiModelProperty(value = "${comment}")
     private Long companyId;
 
-    @ApiModelProperty("客户名称")
+    @Excel(name="客户名称", width = 35)
     @TableField(exist = false)
     private String companyName;
 
-    @ApiModelProperty("税号")
+    @Excel(name="税号", width = 30)
     @TableField(exist = false)
     private String socialCreditCode;
 
@@ -47,17 +48,22 @@ public class BizWorkOrder extends BaseEntity
     private Long contractDetailProcessId;
 
     /** 工单类型 1循环 2代办 */
-    @Excel(name = "工单类型 1循环 2代办")
+//    @Excel(name = "工单类型 1循环 2代办")
     @ApiModelProperty(value = "工单类型 1循环 2代办")
     private Integer type;
 
+    @Excel(name = "工单类型")
+    @TableField(exist = false)
+    @ApiModelProperty(value = "工单类型 1循环 2代办")
+    private String typeName;
+
     /** 无合同 */
-    @Excel(name = "无合同")
+//    @Excel(name = "无合同")
     @ApiModelProperty(value = "无合同")
     private Integer noContract;
 
     /** 编号 */
-    @Excel(name = "编号")
+//    @Excel(name = "编号")
     @ApiModelProperty(value = "编号")
     private String workOrderNo;
 
@@ -65,6 +71,7 @@ public class BizWorkOrder extends BaseEntity
     @ApiModelProperty(value = "任务外键")
     private Long taskTypeId;
 
+    @Excel(name = "项目")
     @TableField(exist = false)
     private String taskTypeName;
 
@@ -75,24 +82,27 @@ public class BizWorkOrder extends BaseEntity
     @TableField(exist = false)
     private String taskTypeDetailName;
 
+    @TableField(exist = false)
+    private Integer isZero;
+
     /** 开始月 */
     @JsonFormat(pattern = "yyyy-MM-dd")
-    @Excel(name = "开始月", width = 30, dateFormat = "yyyy-MM-dd")
+    @Excel(name = "开始月", dateFormat = "yyyy-MM")
     @ApiModelProperty(value = "开始月")
     private Date startMonth;
 
     /** 结束月 */
     @JsonFormat(pattern = "yyyy-MM-dd")
-    @Excel(name = "结束月", width = 30, dateFormat = "yyyy-MM-dd")
+    @Excel(name = "结束月", dateFormat = "yyyy-MM")
     @ApiModelProperty(value = "结束月")
     private Date endMonth;
 
     /** 月数 */
-    @Excel(name = "月数")
+    @Excel(name = "工单月数")
     @ApiModelProperty(value = "月数")
     private Integer monthNum;
 
-    /** 负责人 */
+
     @ApiModelProperty(value = "月数")
     private Long managerId;
 
@@ -101,37 +111,43 @@ public class BizWorkOrder extends BaseEntity
     private Long tenantId;
 
     /** 停止任务 */
-    @Excel(name = "停止任务")
+//    @Excel(name = "停止任务")
     @ApiModelProperty(value = "停止任务")
     private Integer isStop;
 
 
-    @Excel(name = "注册省份编码")
+//    @Excel(name = "注册省份编码")
     @ApiModelProperty(value = "注册省份编码")
     private String provinceCode;
 
     /** 省 */
-    @Excel(name = "省")
+//    @Excel(name = "省")
     @ApiModelProperty(value = "省")
     private String province;
 
     /** 注册城市编码 */
-    @Excel(name = "注册城市编码")
+//    @Excel(name = "注册城市编码")
     @ApiModelProperty(value = "注册城市编码")
     private String cityCode;
 
     /** 市 */
-    @Excel(name = "市")
+//    @Excel(name = "市")
     @ApiModelProperty(value = "市")
     private String city;
 
     /** 注册行政区编码 */
-    @Excel(name = "注册行政区编码")
+//    @Excel(name = "注册行政区编码")
     @ApiModelProperty(value = "注册行政区编码")
     private String districtCode;
 
+    /** 工单执行人 */
+    @Excel(name = "工单执行人")
+    @TableField(exist = false)
+    private String executor;
+
+
     /** 区 */
-    @Excel(name = "区")
+//    @Excel(name = "区")
     @ApiModelProperty(value = "区")
     private String district;
 
@@ -169,6 +185,12 @@ public class BizWorkOrder extends BaseEntity
 
     @TableField(exist = false)
     private String fromCompanyName;
+    @TableField(exist = false)
+    private List<BizStandardCompany> companies;
+
+    /** 委托项目 */
+    @TableField(exist = false)
+    private List<Long> taskTypeIds;
 
 
 

+ 201 - 0
src/main/java/cn/ezhizao/project/business/workOrder/domain/BizWorkOrderExport.java

@@ -0,0 +1,201 @@
+package cn.ezhizao.project.business.workOrder.domain;
+
+import cn.ezhizao.framework.aspectj.lang.annotation.Excel;
+import cn.ezhizao.framework.web.domain.BaseEntity;
+import cn.ezhizao.project.business.entrust.domain.BizEntrust;
+import cn.ezhizao.project.business.standardCpmpany.domain.BizStandardCompany;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 工单信息对象 biz_work_order
+ *
+ * @author ruoyi
+ * @date 2023-10-16
+ */
+@Data
+@TableName(value = "biz_work_order")
+public class BizWorkOrderExport extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 合同外键 */
+    @ApiModelProperty(value = "${comment}")
+    private Long contractId;
+
+    /** 客户外键 */
+    @ApiModelProperty(value = "${comment}")
+    private Long companyId;
+
+    @Excel(name="客户名称", width = 35)
+    @TableField(exist = false)
+    private String companyName;
+
+    @Excel(name="来源")
+    @TableField(exist = false)
+    private String fromCompanyName;
+
+    @Excel(name="税号", width = 30)
+    @TableField(exist = false)
+    private String socialCreditCode;
+
+    @ApiModelProperty("合同明细外键")
+    private Long contractDetailId;
+
+    @ApiModelProperty("合同流程外键")
+    private Long contractDetailProcessId;
+
+    /** 工单类型 1循环 2代办 */
+//    @Excel(name = "工单类型 1循环 2代办")
+    @ApiModelProperty(value = "工单类型 1循环 2代办")
+    private Integer type;
+
+    @Excel(name = "工单类型")
+    @TableField(exist = false)
+    @ApiModelProperty(value = "工单类型 1循环 2代办")
+    private String typeName;
+
+    /** 无合同 */
+//    @Excel(name = "无合同")
+    @ApiModelProperty(value = "无合同")
+    private Integer noContract;
+
+    /** 编号 */
+//    @Excel(name = "编号")
+    @ApiModelProperty(value = "编号")
+    private String workOrderNo;
+
+    /** 任务类型 任务表外键 任务明细表 */
+    @ApiModelProperty(value = "任务外键")
+    private Long taskTypeId;
+
+    @Excel(name = "项目")
+    @TableField(exist = false)
+    private String taskTypeName;
+
+    /** 任务类型 任务表外键 任务明细表 */
+    @ApiModelProperty(value = "任务明细外键")
+    private Long taskTypeDetailId;
+
+    @TableField(exist = false)
+    private String taskTypeDetailName;
+
+    @TableField(exist = false)
+    private Integer isZero;
+
+    /** 开始月 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "开始月", dateFormat = "yyyy-MM")
+    @ApiModelProperty(value = "开始月")
+    private Date startMonth;
+
+    /** 结束月 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "结束月", dateFormat = "yyyy-MM")
+    @ApiModelProperty(value = "结束月")
+    private Date endMonth;
+
+    /** 月数 */
+    @Excel(name = "工单月数")
+    @ApiModelProperty(value = "月数")
+    private Integer monthNum;
+
+
+    @ApiModelProperty(value = "月数")
+    private Long managerId;
+
+    /** 主程序账套外键 */
+    @ApiModelProperty(value = "月数")
+    private Long tenantId;
+
+    /** 停止任务 */
+//    @Excel(name = "停止任务")
+    @ApiModelProperty(value = "停止任务")
+    private Integer isStop;
+
+
+//    @Excel(name = "注册省份编码")
+    @ApiModelProperty(value = "注册省份编码")
+    private String provinceCode;
+
+    /** 省 */
+//    @Excel(name = "省")
+    @ApiModelProperty(value = "省")
+    private String province;
+
+    /** 注册城市编码 */
+//    @Excel(name = "注册城市编码")
+    @ApiModelProperty(value = "注册城市编码")
+    private String cityCode;
+
+    /** 市 */
+//    @Excel(name = "市")
+    @ApiModelProperty(value = "市")
+    private String city;
+
+    /** 注册行政区编码 */
+//    @Excel(name = "注册行政区编码")
+    @ApiModelProperty(value = "注册行政区编码")
+    private String districtCode;
+
+    /** 工单执行人 */
+    @Excel(name = "工单执行人")
+    @TableField(exist = false)
+    private String executor;
+
+
+    /** 区 */
+//    @Excel(name = "区")
+    @ApiModelProperty(value = "区")
+    private String district;
+
+    @TableField(exist = false)
+    private List<BizWorkOrderRecord> records;
+    @TableField(exist = false)
+    private List<BizWorkOrderDetail> details;
+
+    /** 服务管理查询条件 */
+    @TableField(exist = false)
+    private Integer status;
+    @TableField(exist = false)
+    private String year;
+    @TableField(exist = false)
+    private String month;
+
+    @ApiModelProperty("服务人员")
+    private Long serviceId;
+
+    @TableField(exist = false)
+    private String serviceName;
+
+    @TableField(exist = false)
+    private List<Long> ids;
+
+    @TableField(exist = false)
+    private BizEntrust entrust;
+
+    @TableField(exist = false)
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date currentMonth;
+
+    @TableField(exist = false)
+    private Long toTenantId;
+
+
+    @TableField(exist = false)
+    private List<BizStandardCompany> companies;
+
+    /** 委托项目 */
+    @TableField(exist = false)
+    private List<Long> taskTypeIds;
+
+
+
+
+}

+ 201 - 0
src/main/java/cn/ezhizao/project/business/workOrder/domain/BizWorkOrderOnce.java

@@ -0,0 +1,201 @@
+package cn.ezhizao.project.business.workOrder.domain;
+
+import cn.ezhizao.framework.aspectj.lang.annotation.Excel;
+import cn.ezhizao.framework.web.domain.BaseEntity;
+import cn.ezhizao.project.business.entrust.domain.BizEntrust;
+import cn.ezhizao.project.business.standardCpmpany.domain.BizStandardCompany;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 工单信息对象 biz_work_order
+ *
+ * @author ruoyi
+ * @date 2023-10-16
+ */
+@Data
+@TableName(value = "biz_work_order")
+public class BizWorkOrderOnce extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 合同外键 */
+    @ApiModelProperty(value = "${comment}")
+    private Long contractId;
+
+    /** 客户外键 */
+    @ApiModelProperty(value = "${comment}")
+    private Long companyId;
+
+    @Excel(name="客户名称", width = 35)
+    @TableField(exist = false)
+    private String companyName;
+
+    @Excel(name="税号", width = 30)
+    @TableField(exist = false)
+    private String socialCreditCode;
+
+    @Excel(name="来源")
+    @TableField(exist = false)
+    private String fromCompanyName;
+
+    @ApiModelProperty("合同明细外键")
+    private Long contractDetailId;
+
+    @ApiModelProperty("合同流程外键")
+    private Long contractDetailProcessId;
+
+    /** 工单类型 1循环 2代办 */
+//    @Excel(name = "工单类型 1循环 2代办")
+    @ApiModelProperty(value = "工单类型 1循环 2代办")
+    private Integer type;
+
+    @Excel(name = "工单类型")
+    @TableField(exist = false)
+    @ApiModelProperty(value = "工单类型 1循环 2代办")
+    private String typeName;
+
+    /** 无合同 */
+//    @Excel(name = "无合同")
+    @ApiModelProperty(value = "无合同")
+    private Integer noContract;
+
+    /** 编号 */
+//    @Excel(name = "编号")
+    @ApiModelProperty(value = "编号")
+    private String workOrderNo;
+
+    /** 任务类型 任务表外键 任务明细表 */
+    @ApiModelProperty(value = "任务外键")
+    private Long taskTypeId;
+
+    @Excel(name = "项目")
+    @TableField(exist = false)
+    private String taskTypeName;
+
+    /** 任务类型 任务表外键 任务明细表 */
+    @ApiModelProperty(value = "任务明细外键")
+    private Long taskTypeDetailId;
+
+    @TableField(exist = false)
+    private String taskTypeDetailName;
+
+    @TableField(exist = false)
+    private Integer isZero;
+
+    /** 开始月 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+//    @Excel(name = "开始月", dateFormat = "yyyy-MM")
+    @ApiModelProperty(value = "开始月")
+    private Date startMonth;
+
+    /** 结束月 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+//    @Excel(name = "结束月", dateFormat = "yyyy-MM")
+    @ApiModelProperty(value = "结束月")
+    private Date endMonth;
+
+    /** 月数 */
+//    @Excel(name = "工单月数")
+    @ApiModelProperty(value = "月数")
+    private Integer monthNum;
+
+
+    @ApiModelProperty(value = "月数")
+    private Long managerId;
+
+    /** 主程序账套外键 */
+    @ApiModelProperty(value = "月数")
+    private Long tenantId;
+
+    /** 停止任务 */
+//    @Excel(name = "停止任务")
+    @ApiModelProperty(value = "停止任务")
+    private Integer isStop;
+
+
+//    @Excel(name = "注册省份编码")
+    @ApiModelProperty(value = "注册省份编码")
+    private String provinceCode;
+
+    /** 省 */
+//    @Excel(name = "省")
+    @ApiModelProperty(value = "省")
+    private String province;
+
+    /** 注册城市编码 */
+//    @Excel(name = "注册城市编码")
+    @ApiModelProperty(value = "注册城市编码")
+    private String cityCode;
+
+    /** 市 */
+//    @Excel(name = "市")
+    @ApiModelProperty(value = "市")
+    private String city;
+
+    /** 注册行政区编码 */
+//    @Excel(name = "注册行政区编码")
+    @ApiModelProperty(value = "注册行政区编码")
+    private String districtCode;
+
+    /** 工单执行人 */
+    @Excel(name = "工单执行人")
+    @TableField(exist = false)
+    private String executor;
+
+
+    /** 区 */
+//    @Excel(name = "区")
+    @ApiModelProperty(value = "区")
+    private String district;
+
+    @TableField(exist = false)
+    private List<BizWorkOrderRecord> records;
+    @TableField(exist = false)
+    private List<BizWorkOrderDetail> details;
+
+    /** 服务管理查询条件 */
+    @TableField(exist = false)
+    private Integer status;
+    @TableField(exist = false)
+    private String year;
+    @TableField(exist = false)
+    private String month;
+
+    @ApiModelProperty("服务人员")
+    private Long serviceId;
+
+    @TableField(exist = false)
+    private String serviceName;
+
+    @TableField(exist = false)
+    private List<Long> ids;
+
+    @TableField(exist = false)
+    private BizEntrust entrust;
+
+    @TableField(exist = false)
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date currentMonth;
+
+    @TableField(exist = false)
+    private Long toTenantId;
+
+
+    @TableField(exist = false)
+    private List<BizStandardCompany> companies;
+
+    /** 委托项目 */
+    @TableField(exist = false)
+    private List<Long> taskTypeIds;
+
+
+
+
+}

+ 198 - 0
src/main/java/cn/ezhizao/project/business/workOrder/domain/BizWorkOrderOnceExport.java

@@ -0,0 +1,198 @@
+package cn.ezhizao.project.business.workOrder.domain;
+
+import cn.ezhizao.framework.aspectj.lang.annotation.Excel;
+import cn.ezhizao.framework.web.domain.BaseEntity;
+import cn.ezhizao.project.business.entrust.domain.BizEntrust;
+import cn.ezhizao.project.business.standardCpmpany.domain.BizStandardCompany;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 工单信息对象 biz_work_order
+ *
+ * @author ruoyi
+ * @date 2023-10-16
+ */
+@Data
+@TableName(value = "biz_work_order")
+public class BizWorkOrderOnceExport extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 合同外键 */
+    @ApiModelProperty(value = "${comment}")
+    private Long contractId;
+
+    /** 客户外键 */
+    @ApiModelProperty(value = "${comment}")
+    private Long companyId;
+
+    @Excel(name="客户名称")
+    @TableField(exist = false)
+    private String companyName;
+
+    @Excel(name="税号", width = 30)
+    @TableField(exist = false)
+    private String socialCreditCode;
+
+    @ApiModelProperty("合同明细外键")
+    private Long contractDetailId;
+
+    @ApiModelProperty("合同流程外键")
+    private Long contractDetailProcessId;
+
+    /** 工单类型 1循环 2代办 */
+//    @Excel(name = "工单类型 1循环 2代办")
+    @ApiModelProperty(value = "工单类型 1循环 2代办")
+    private Integer type;
+
+    @Excel(name = "工单类型")
+    @TableField(exist = false)
+    @ApiModelProperty(value = "工单类型 1循环 2代办")
+    private String typeName;
+
+    /** 无合同 */
+//    @Excel(name = "无合同")
+    @ApiModelProperty(value = "无合同")
+    private Integer noContract;
+
+    /** 编号 */
+//    @Excel(name = "编号")
+    @ApiModelProperty(value = "编号")
+    private String workOrderNo;
+
+    /** 任务类型 任务表外键 任务明细表 */
+    @ApiModelProperty(value = "任务外键")
+    private Long taskTypeId;
+
+    @Excel(name = "项目")
+    @TableField(exist = false)
+    private String taskTypeName;
+
+    /** 任务类型 任务表外键 任务明细表 */
+    @ApiModelProperty(value = "任务明细外键")
+    private Long taskTypeDetailId;
+
+    @TableField(exist = false)
+    private String taskTypeDetailName;
+
+    @TableField(exist = false)
+    private Integer isZero;
+
+    /** 开始月 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+//    @Excel(name = "开始月", dateFormat = "yyyy-MM")
+    @ApiModelProperty(value = "开始月")
+    private Date startMonth;
+
+    /** 结束月 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+//    @Excel(name = "结束月", dateFormat = "yyyy-MM")
+    @ApiModelProperty(value = "结束月")
+    private Date endMonth;
+
+    /** 月数 */
+//    @Excel(name = "工单月数")
+    @ApiModelProperty(value = "月数")
+    private Integer monthNum;
+
+
+    @ApiModelProperty(value = "月数")
+    private Long managerId;
+
+    /** 主程序账套外键 */
+    @ApiModelProperty(value = "月数")
+    private Long tenantId;
+
+    /** 停止任务 */
+//    @Excel(name = "停止任务")
+    @ApiModelProperty(value = "停止任务")
+    private Integer isStop;
+
+
+//    @Excel(name = "注册省份编码")
+    @ApiModelProperty(value = "注册省份编码")
+    private String provinceCode;
+
+    /** 省 */
+//    @Excel(name = "省")
+    @ApiModelProperty(value = "省")
+    private String province;
+
+    /** 注册城市编码 */
+//    @Excel(name = "注册城市编码")
+    @ApiModelProperty(value = "注册城市编码")
+    private String cityCode;
+
+    /** 市 */
+//    @Excel(name = "市")
+    @ApiModelProperty(value = "市")
+    private String city;
+
+    /** 注册行政区编码 */
+//    @Excel(name = "注册行政区编码")
+    @ApiModelProperty(value = "注册行政区编码")
+    private String districtCode;
+
+    /** 工单执行人 */
+    @Excel(name = "工单执行人")
+    @TableField(exist = false)
+    private String executor;
+
+
+    /** 区 */
+//    @Excel(name = "区")
+    @ApiModelProperty(value = "区")
+    private String district;
+
+    @TableField(exist = false)
+    private List<BizWorkOrderRecord> records;
+    @TableField(exist = false)
+    private List<BizWorkOrderDetail> details;
+
+    /** 服务管理查询条件 */
+    @TableField(exist = false)
+    private Integer status;
+    @TableField(exist = false)
+    private String year;
+    @TableField(exist = false)
+    private String month;
+
+    @ApiModelProperty("服务人员")
+    private Long serviceId;
+
+    @TableField(exist = false)
+    private String serviceName;
+
+    @TableField(exist = false)
+    private List<Long> ids;
+
+    @TableField(exist = false)
+    private BizEntrust entrust;
+
+    @TableField(exist = false)
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date currentMonth;
+
+    @TableField(exist = false)
+    private Long toTenantId;
+
+    @TableField(exist = false)
+    private String fromCompanyName;
+    @TableField(exist = false)
+    private List<BizStandardCompany> companies;
+
+    /** 委托项目 */
+    @TableField(exist = false)
+    private List<Long> taskTypeIds;
+
+
+
+
+}

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

@@ -38,4 +38,6 @@ public interface BizWorkOrderMapper extends BaseMapper<BizWorkOrder>
     public int addSocialSecurity(Long companyId, List<Map<String, Object>> tableValues);
 
     public int stopTasks(List<Map<String, Object>> tableValues);
+
+    List<BizWorkOrder> selectStarMonthList(BizWorkOrder workOrder);
 }

+ 9 - 0
src/main/java/cn/ezhizao/project/business/workOrder/service/IBizWorkOrderService.java

@@ -37,4 +37,13 @@ public interface IBizWorkOrderService extends IService<BizWorkOrder>
     public int insertTasks(List<Map<String, Object>> tableValues);
 
     public int stopTasks(List<Map<String, Object>>tableValues);
+
+
+
+    /**
+     * 根据月份查询工单信息列表
+     * @param
+     * @return
+     */
+    List<BizWorkOrder> selectStarMonthList(BizWorkOrder workOrder);
 }

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

@@ -52,4 +52,9 @@ public class BizWorkOrderServiceImpl  extends ServiceImpl<BizWorkOrderMapper, Bi
         return bizWorkOrderMapper.stopTasks(tableValues);
     }
 
+    @Override
+    public List<BizWorkOrder> selectStarMonthList(BizWorkOrder workOrder) {
+        return bizWorkOrderMapper.selectStarMonthList(workOrder);
+    }
+
 }

+ 2 - 0
src/main/java/cn/ezhizao/project/tenant/mapper/TenantMapper.java

@@ -17,4 +17,6 @@ public interface TenantMapper extends BaseMapper<Tenant>
     List<Tenant> getList(Tenant tenant);
 
     List<Tenant> getFactories();
+
+    List<Tenant> getFactoriesId(Long id);
 }

+ 2 - 0
src/main/java/cn/ezhizao/project/tenant/service/ITenantService.java

@@ -16,5 +16,7 @@ public interface ITenantService  extends IService<Tenant>
 
     void setTenantInfo(Tenant tenant);
 
+    List<Tenant> getFactoriesId(Long id);
+
     List<Tenant> getFactories();
 }

+ 6 - 0
src/main/java/cn/ezhizao/project/tenant/service/impl/TenantServiceImpl.java

@@ -32,6 +32,12 @@ public class TenantServiceImpl extends ServiceImpl<TenantMapper, Tenant>  implem
 
     }
 
+    @Override
+    public List<Tenant> getFactoriesId(Long id) {
+        return tenantMapper.getFactoriesId(id);
+    }
+
+
     @Override
     public List<Tenant> getFactories() {
         return tenantMapper.getFactories();

+ 1 - 2
src/main/resources/application-dev.yml

@@ -30,7 +30,7 @@ spring:
         druid:
             # 主库数据源
             master:
-                url: jdbc:mysql://120.46.159.163:3306/ezhizao_yzbh_v2?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&rewriteBatchedStatements=true&serverTimezone=GMT%2B8
+                url: jdbc:mysql://120.46.159.163:3306/ezhizao_yzbh_v2?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&useSSL=true&rewriteBatchedStatements=true&serverTimezone=GMT%2B8
                 username: root
                 password: ezhizao.cn123456
 #                url: jdbc:mysql://localhost:3306/ezhizao_yzbh_v2?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&useSSL=true&rewriteBatchedStatements=true&serverTimezone=GMT%2B8
@@ -82,7 +82,6 @@ spring:
                 wall:
                     config:
                         multi-statement-allow: true
-
 # 文件上传
 ruoyi:
     profile: D:/Ezhizao/yzbh/

+ 1 - 1
src/main/resources/application-linux.yml

@@ -32,7 +32,7 @@ spring:
         druid:
             # 主库数据源
             master:
-                url: jdbc:mysql://172.18.0.4:3306/ezhizao_yzbh_v2?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&rewriteBatchedStatements=true&serverTimezone=GMT%2B8
+                url: jdbc:mysql://172.18.0.4:3306/ezhizao_yzbh_v2?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&useSSL=true&rewriteBatchedStatements=true&serverTimezone=GMT%2B8
                 username: root
                 password: ezhizao.cn123456
             # 从库数据源

+ 50 - 0
src/main/resources/mybatis/business/BizArchiveInputDetailMapper.xml

@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.ezhizao.project.business.order.mapper.BizArchiveInputDetailMapper">
+
+    <resultMap type="cn.ezhizao.project.business.order.domain.BizArchiveInputDetail" id="BizArchiveInputDetailResult">
+        <id column="id" property="id"/>
+    </resultMap>
+
+
+    <select id="getList" parameterType="BizArchiveInputDetail" resultMap="BizArchiveInputDetailResult">
+        SELECT t1.*, t2.name as task_type_name, t2.pay_address
+        FROM biz_archive_input_detail t1
+        left join biz_task_type t2 on t2.id = t1.task_type_id
+        <trim prefix=" WHERE" suffix="" suffixOverrides="AND">
+            t1.deleted = 0
+            <if test="companyId != null "> AND t1.company_id = #{companyId}</if>
+            <if test="contractId != null "> AND t1.contract_id = #{contractId}</if>
+            <if test="serviceNum != null "> AND t1.service_num = #{serviceNum}</if>
+            <if test="price != null "> AND t1.price = #{price}</if>
+            <if test="amount != null "> AND t1.amount = #{amount}</if>
+        </trim>
+    </select>
+    <select id="getDetail" parameterType="BizArchiveInputDetail" resultMap="BizArchiveInputDetailResult">
+        SELECT *
+        FROM biz_archive_input_detail
+        <trim prefix=" WHERE" suffix="" suffixOverrides="AND">
+            deleted = 0
+            <if test="contractId != null "> AND contract_id = #{contractId}</if>
+            <if test="taskTypeId != null "> AND task_type_id = #{taskTypeId}</if>
+        </trim>
+
+    </select>
+    <delete id="physicalDelete">
+        DELETE FROM biz_archive_input_detail
+        <trim prefix=" WHERE" suffix="" suffixOverrides="AND">
+            <if test="id != null">
+                id = #{id} AND
+            </if>
+            <if test="contractId != null ">
+                contract_id = #{contractId} AND
+            </if>
+            <if test="companyId != null ">
+                company_id = #{companyId} AND
+            </if>
+       <!-- 删除条件为其他外键可以在这里加 -->
+        </trim>
+    </delete>
+</mapper>

+ 127 - 0
src/main/resources/mybatis/business/BizArchiveInputMapper.xml

@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.ezhizao.project.business.order.mapper.BizArchiveInputMapper">
+
+    <resultMap type="cn.ezhizao.project.business.order.domain.BizArchiveInput" id="BizArchiveInputResult">
+        <id column="id" property="id"/>
+        <result column="source_id" property="sourceId"/>
+        <result column="referrer_data_source" property="referrerDataSource"/>
+        <association property="sourceName"
+                     column="{ source_id = source_id, referrer_data_source = referrer_data_source }"
+                     select="getSourceName"/>
+        <association property="alterNumber" column="{ id = id, from_id = from_id }" select="getAlterNumber"/>
+    </resultMap>
+    <select id="getSourceName" resultType="java.lang.String">
+        <if test="referrer_data_source == null">
+            select '' as name
+        </if>
+        <if test="referrer_data_source == 'company'">
+            select name from biz_company where biz_company.id = #{source_id}
+        </if>
+        <if test="referrer_data_source == 'employee'">
+            select nick_name from sys_user where sys_user.user_id = #{source_id}
+        </if>
+        <if test="referrer_data_source == 'channel'">
+            select name from biz_channel where biz_channel.id = #{source_id}
+        </if>
+        <if test="referrer_data_source == ''">
+            select '' as name
+        </if>
+    </select>
+
+    <select id="getAlterNumber" resultType="java.lang.Integer">
+        select count(1) from biz_archive_input t where t.deleted = 0
+        <if test="from_id == 0">
+            and t.from_id = #{id}
+        </if>
+        <if test="from_id != 0">
+            and t.from_id = #{from_id} or t.id = #{from_id}
+        </if>
+    </select>
+
+
+    <select id="getList" parameterType="BizArchiveInput" resultMap="BizArchiveInputResult">
+        SELECT
+        t1.*,
+        t2.name as company_name,
+        t2.social_credit_code as social_credit_code,
+        t3.nick_name as signer_name,
+        t4.title as source_category_name,
+        t4.referrer_data_source
+        FROM biz_archive_input t1
+        left join biz_company t2 on t2.id = t1.company_id
+        left join sys_user t3 on t3.user_id = t1.signer_id
+        left join biz_source t4 on t4.id = t1.source_category_id
+        <trim prefix=" WHERE" suffix="" suffixOverrides="AND">
+            t1.deleted = 0
+            <if test="fromId != null">AND (t1.from_id = #{fromId} or t1.id = #{fromId})</if>
+            <if test="id != null  and id != ''">AND t1.id = #{id}</if>
+            <if test="companyName != null  and companyName != ''">AND t2.name like concat("%", #{companyName}, "%")</if>
+            <if test="archiveTypeId != null">and archive_type_id = #{archiveTypeId}</if>
+            <if test="companyId != null  and companyId != ''">AND t1.company_id = #{companyId}</if>
+            <if test="archiveCode != null  and archiveCode != ''">AND t1.archive_code = #{archiveCode}</if>
+            <if test="startMonth != null ">AND t1.start_month = #{startMonth}</if>
+            <if test="endMonth != null ">AND t1.end_month = #{endMonth}</if>
+            <if test="proofUrl != null  and proofUrl != ''">AND t1.proof_url = #{proofUrl}</if>
+            <if test="contractNo != null  and contractNo != ''">AND t1.contract_no = #{contractNo}</if>
+            <if test="formDate != null ">AND t1.form_date = #{formDate}</if>
+            <if test="amount != null ">AND t1.amount = #{amount}</if>
+            <if test="verifyStatus != null ">AND t1.verify_status = #{verifyStatus}</if>
+            <if test="contractType != null ">AND t1.contract_type = #{contractType}</if>
+            <if test="serviceType != null ">AND t1.service_type = #{serviceType}</if>
+            <if test="outputDate != null ">AND t1.output_date = #{outputDate}</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="verifyRemark != null  and verifyRemark != ''">AND t1.verify_remark = #{verifyRemark}</if>
+            <if test="tenantId != null">AND t1.tenant_id = #{tenantId}</if>
+            <if test="isKeepAccount != null">AND <if test="isKeepAccount == 0">not</if> exists (select 1 from
+                biz_archive_input_detail t5 where t5.deleted = 0 and t5.contract_id = t1.id and t5.task_type_id = 1)
+            </if>
+            <if test="isSocialSecurity != null">AND <if test="isSocialSecurity == 0">not</if> exists (select 1 from
+                biz_archive_input_detail t5 where t5.deleted = 0 and t5.contract_id = t1.id and t5.task_type_id = 2)
+            </if>
+            <if test="isHousingFund != null">AND <if test="isHousingFund == 0">not</if> exists (select 1 from
+                biz_archive_input_detail t5 where t5.deleted = 0 and t5.contract_id = t1.id and t5.task_type_id = 3)
+            </if>
+            <if test="isReturnTax != null">AND <if test="isReturnTax == 0">not</if> exists (select 1 from
+                biz_archive_input_detail t5 where t5.deleted = 0 and t5.contract_id = t1.id and t5.task_type_id = 4)
+            </if>
+            <if test="isRegister != null">AND <if test="isRegister == 0">not</if> exists (select 1 from
+                biz_archive_input_detail t5 where t5.deleted = 0 and t5.contract_id = t1.id and t5.task_type_id = 5)
+            </if>
+            <if test="isAlter != null">AND <if test="isAlter == 0">not</if> exists (select 1 from
+                biz_archive_input_detail t5 where t5.deleted = 0 and t5.contract_id = t1.id and t5.task_type_id = 6)
+            </if>
+            <if test="isLogout != null">AND <if test="isLogout == 0">not</if> exists (select 1 from
+                biz_archive_input_detail t5 where t5.deleted = 0 and t5.contract_id = t1.id and t5.task_type_id = 7)
+            </if>
+            <if test="isQualified != null">AND <if test="isQualified == 0">not</if> exists (select 1 from
+                biz_archive_input_detail t5 where t5.deleted = 0 and t5.contract_id = t1.id and t5.task_type_id = 8)
+            </if>
+            <if test="isOther != null">AND <if test="isOther == 0">not</if> exists (select 1 from
+                biz_archive_input_detail t5 where t5.deleted = 0 and t5.contract_id = t1.id and t5.task_type_id = 9)
+            </if>
+        </trim>
+    </select>
+
+    <update id="removeByIds">
+        UPDATE biz_archive_input
+        SET deleted=1
+        WHERE id in
+        <foreach collection="ids" item="id" index="index" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </update>
+
+    <delete id="physicalDelete">
+        DELETE FROM biz_archive_input
+        <trim prefix=" WHERE" suffix="" suffixOverrides="AND">
+            <if test="id != null">
+                id = #{id} AND
+            </if>
+            <!-- 删除条件为其他外键可以在这里加 -->
+        </trim>
+    </delete>
+</mapper>

+ 100 - 0
src/main/resources/mybatis/business/BizStandardCompanyMapper.xml

@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.ezhizao.project.business.standardCpmpany.mapper.BizStandardCompanyMapper">
+
+    <resultMap type="cn.ezhizao.project.business.standardCpmpany.domain.BizStandardCompany" id="BizStandardCompanyResult">
+        <id column="id" property="id"/>
+    </resultMap>
+
+
+    <select id="getList" parameterType="BizStandardCompany" resultMap="BizStandardCompanyResult">
+        SELECT
+        c.*
+        FROM biz_company c
+        LEFT JOIN sys_user s ON c.leader_id=s.user_id
+        <trim prefix=" WHERE" suffix="" suffixOverrides="AND">
+            deleted = 0
+            <if test="category != null  and category != ''"> AND category = #{category}</if>
+            <if test="code != null  and code != ''"> AND code = #{code}</if>
+            <if test="name != null  and name != ''"> AND name like concat('%', #{name}, '%')</if>
+            <if test="shortName != null  and shortName != ''"> AND short_name like concat('%', #{shortName}, '%')</if>
+            <if test="oldName != null  and oldName != ''"> AND old_name like concat('%', #{oldName}, '%')</if>
+            <if test="owner != null  and owner != ''"> AND owner = #{owner}</if>
+            <if test="phone != null  and phone != ''"> AND phone = #{phone}</if>
+            <if test="email != null  and email != ''"> AND email = #{email}</if>
+            <if test="contactAddress != null  and contactAddress != ''"> AND contact_address = #{contactAddress}</if>
+            <if test="source != null  and source != ''"> AND source = #{source}</if>
+            <if test="type != null  and type != ''"> AND type = #{type}</if>
+            <if test="socialCreditCode != null  and socialCreditCode != ''"> AND social_credit_code = #{socialCreditCode}</if>
+            <if test="mainBusiness != null  and mainBusiness != ''"> AND main_business = #{mainBusiness}</if>
+            <if test="legalRepresentative != null  and legalRepresentative != ''"> AND legal_representative = #{legalRepresentative}</if>
+            <if test="foundationDate != null  and foundationDate != ''"> AND foundation_date = #{foundationDate}</if>
+            <if test="licenceDate != null  and licenceDate != ''"> AND licence_date = #{licenceDate}</if>
+            <if test="businessStartDate != null  and businessStartDate != ''"> AND business_start_date = #{businessStartDate}</if>
+            <if test="businessEndDate != null  and businessEndDate != ''"> AND business_end_date = #{businessEndDate}</if>
+            <if test="isPermanentlyEffective != null "> AND is_permanently_effective = #{isPermanentlyEffective}</if>
+            <if test="registerMoney != null  and registerMoney != ''"> AND register_money = #{registerMoney}</if>
+            <if test="registerMoneyUnit != null  and registerMoneyUnit != ''"> AND register_money_unit = #{registerMoneyUnit}</if>
+            <if test="provinceCode != null  and provinceCode != ''"> AND province_code = #{provinceCode}</if>
+            <if test="province != null  and province != ''"> AND province = #{province}</if>
+            <if test="cityCode != null  and cityCode != ''"> AND city_code = #{cityCode}</if>
+            <if test="city != null  and city != ''"> AND city = #{city}</if>
+            <if test="districtCode != null  and districtCode != ''"> AND district_code = #{districtCode}</if>
+            <if test="district != null  and district != ''"> AND district = #{district}</if>
+            <if test="address != null  and address != ''"> AND address = #{address}</if>
+            <if test="businessField != null  and businessField != ''"> AND business_field = #{businessField}</if>
+            <if test="taxType != null  and taxType != ''"> AND tax_type = #{taxType}</if>
+            <if test="isZero != null "> AND is_zero = #{isZero}</if>
+            <if test="competentTaxAuthority != null  and competentTaxAuthority != ''"> AND competent_tax_authority = #{competentTaxAuthority}</if>
+            <if test="taxCollectorName != null  and taxCollectorName != ''"> AND tax_collector_name like concat('%', #{taxCollectorName}, '%')</if>
+            <if test="taxCollectorPhone != null  and taxCollectorPhone != ''"> AND tax_collector_phone = #{taxCollectorPhone}</if>
+            <if test="taxMonth != null "> AND tax_month = #{taxMonth}</if>
+            <if test="openingBank != null  and openingBank != ''"> AND opening_bank = #{openingBank}</if>
+            <if test="bankAccount != null  and bankAccount != ''"> AND bank_account = #{bankAccount}</if>
+            <if test="annualIncome != null  and annualIncome != ''"> AND annual_income = #{annualIncome}</if>
+            <if test="governmentAccountNo != null  and governmentAccountNo != ''"> AND government_account_no = #{governmentAccountNo}</if>
+            <if test="governmentPassword != null  and governmentPassword != ''"> AND government_password = #{governmentPassword}</if>
+            <if test="socialSecurityAccountNo != null  and socialSecurityAccountNo != ''"> AND social_security_account_no = #{socialSecurityAccountNo}</if>
+            <if test="socialSecurityPassword != null  and socialSecurityPassword != ''"> AND social_security_password = #{socialSecurityPassword}</if>
+            <if test="employeePassword != null  and employeePassword != ''"> AND employee_password = #{employeePassword}</if>
+            <if test="housingFundPassword != null  and housingFundPassword != ''"> AND housing_fund_password = #{housingFundPassword}</if>
+            <if test="housingFundUnitAccount != null  and housingFundUnitAccount != ''"> AND housing_fund_unit_account = #{housingFundUnitAccount}</if>
+            <if test="housingFundDeductionPassword != null  and housingFundDeductionPassword != ''"> AND housing_fund_deduction_password = #{housingFundDeductionPassword}</if>
+            <if test="collectionMethod != null  and collectionMethod != ''"> AND collection_method = #{collectionMethod}</if>
+            <if test="quotaAmount != null "> AND quota_amount = #{quotaAmount}</if>
+            <if test="isPayOnWindow != null "> AND is_pay_on_window = #{isPayOnWindow}</if>
+            <if test="isFirstSocialSecurity != null "> AND is_first_social_security = #{isFirstSocialSecurity}</if>
+            <if test="isFirstHousingFund != null "> AND is_first_housing_fund = #{isFirstHousingFund}</if>
+            <if test="leaderId != null and  leaderId != '' "> AND c.leader_id = #{leaderId}</if>
+            <if test="adviserId != null  and  adviserId != ''"> AND c.adviser_id = #{adviserId}</if>
+            <if test="leaderName != null and  leaderName != '' "> AND s.nick_name LIKE concat('%', #{leaderName}, '%')</if>
+            <if test="tenantId != null ">AND c.tenant_id = #{tenantId}</if>
+        </trim>
+    </select>
+
+    <select id="getUserById" resultType="String">
+        SELECT nick_name FROM sys_user  WHERE user_id = #{id}
+    </select>
+
+    <update id="updateLeaderId">
+        UPDATE biz_company SET leader_id=#{userId}
+        WHERE id=#{id}
+    </update>
+
+    <update id="updateAdviserId">
+        UPDATE biz_company SET adviser_id=#{userId}
+        WHERE id=#{id}
+    </update>
+
+    <delete id="physicalDelete">
+        DELETE FROM biz_company
+        <trim prefix=" WHERE" suffix="" suffixOverrides="AND">
+            <if test="id != null">
+                id = #{id} AND
+            </if>
+            <!-- 删除条件为其他外键可以在这里加 -->
+        </trim>
+    </delete>
+</mapper>

+ 54 - 9
src/main/resources/mybatis/business/BizWorkOrderMapper.xml

@@ -8,6 +8,49 @@
         <id column="id" property="id"/>
     </resultMap>
 
+
+    <select id="selectStarMonthList" parameterType="BizWorkOrder" resultMap="BizWorkOrderResult">
+        SELECT t1.*, t2.name as company_name, t2.social_credit_code, t3.name as task_type_name, t4.name as
+        task_type_detail_name, t5.nick_name as service_name, t7.account_name as from_company_name
+        FROM biz_work_order t1
+        left join biz_company t2 on t2.id = t1.company_id
+        left join biz_task_type t3 on t3.id = t1.task_type_id
+        left join biz_task_type_detail t4 on t4.id = t1.task_type_detail_id
+        left join biz_tenant t7 on t7.id = t1.tenant_id
+        left join sys_user t5 on t5.user_id = t1.service_id
+        <trim prefix=" WHERE" suffix="" suffixOverrides="AND">
+            t1.deleted = 0
+            <if test="id != null "> AND t1.id = #{id}</if>
+            <if test="ids != null and ids.size() > 0">
+                AND t1.id IN
+                <foreach collection="ids" index="index" item="item" separator="," open="(" close=")">
+                    #{item,jdbcType=BIGINT}
+                </foreach>
+            </if>
+            <if test="companyName != null and companyName!=''"> AND t2.name like concat('%', #{companyName}, '%')</if>
+            <if test="tenantId != null ">
+                <!--                AND exists (select 1 from biz_entrust t1.tenant_id = tenant_id where )-->
+                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="noContract != null ">AND t1.no_contract = #{noContract}</if>
+            <if test="workOrderNo != null  and workOrderNo != ''">AND t1.work_order_no = #{workOrderNo}</if>
+            <if test="taskTypeId != null ">AND t1.task_type_id = #{taskTypeId}</if>
+            <if test="startMonth != null ">AND t1.start_month &lt;= #{startMonth}</if>
+            <if test="startMonth != null ">AND t1.end_month &gt;= #{startMonth}</if>
+            <if test="monthNum != null ">AND t1.month_num = #{monthNum}</if>
+            <if test="isStop != null ">AND t1.is_stop = #{isStop}</if>
+            <if test="currentMonth != null"> AND t1.start_month != 0 AND #{currentMonth} &gt;= (case when t1.task_type_id = 1 then DATE_ADD(t1.start_month,interval 1 month) else t1.start_month end) and #{currentMonth} &lt;= (case when t1.end_month = 0 then #{currentMonth} when t1.task_type_id = 1 then DATE_ADD(t1.end_month,interval 1 month) else t1.end_month end)</if>
+            <if test="toTenantId != null and currentMonth != null">
+                AND exists (select 1 from biz_entrust t6 where t6.deleted = 0 and t6.to_tenant_id = #{toTenantId} and t6.work_month = #{currentMonth} and t1.id = t6.work_order_id )
+            </if>
+            <if test="toTenantId != null">
+                AND exists (select 1 from biz_entrust t6 where t6.deleted = 0 and t6.to_tenant_id = #{toTenantId} and t1.id = t6.work_order_id )
+            </if>
+        </trim>
+    </select>
+
     <select id="getList" parameterType="BizWorkOrder" resultMap="BizWorkOrderResult">
         SELECT t1.*, t2.name as company_name, t2.social_credit_code, t3.name as task_type_name, t4.name as
         task_type_detail_name, t5.nick_name as service_name, t7.account_name as from_company_name
@@ -35,6 +78,8 @@
             <if test="type != null ">AND t1.type = #{type}</if>
             <if test="noContract != null ">AND t1.no_contract = #{noContract}</if>
             <if test="workOrderNo != null  and workOrderNo != ''">AND t1.work_order_no = #{workOrderNo}</if>
+            <if test="taskTypeId != null ">AND t1.task_type_id = #{taskTypeId}</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>
@@ -47,6 +92,7 @@
                 AND exists (select 1 from biz_entrust t6 where t6.deleted = 0 and t6.to_tenant_id = #{toTenantId} and t1.id = t6.work_order_id )
             </if>
         </trim>
+        ORDER BY t1.create_time DESC
     </select>
 
     <delete id="physicalDelete">
@@ -67,15 +113,14 @@
                 tenant_id,
                 create_time,
                 creator_id
-            ) select
-                #{item.id},
-                #{item.workOrderId},
-                company_id,
-                tenant_id,
-                sysdate(),
-                #{item.creatorId}
-            from biz_work_order where id = #{item.workOrderId}
-            and not exists (select 1 from ${item.tableName} where ${item.tableName}.company_id = biz_work_order.company_id and is_stop = 0)
+            )values (
+            #{item.id,jdbcType=BIGINT},
+            #{item.companyId,jdbcType=BIGINT},
+            #{item.workOrderId,jdbcType=BIGINT},
+            #{item.tenantId,jdbcType=BIGINT},
+            sysdate(),
+            #{item.creatorId,jdbcType=BIGINT}
+            )
         </foreach>
     </insert>
 

+ 7 - 0
src/main/resources/mybatis/tenant/TenantMapper.xml

@@ -62,4 +62,11 @@
     <select id="getFactories" parameterType="Tenant" resultMap="TenantResult">
         select * FROM biz_tenant where deleted = 0 and exists (select 1 from sys_version where sys_version.id = biz_tenant.version_id and sys_version.id = 4)
     </select>
+
+    <select id="getFactoriesId" parameterType="Tenant" resultMap="TenantResult">
+        select * FROM biz_tenant
+        where deleted = 0
+        and id IN
+        (SELECT tenant_id FROM biz_entrust_order WHERE deleted = 0 AND from_tenant_id =#{id} AND status=1 )
+    </select>
 </mapper>