Pārlūkot izejas kodu

日报代码和合同代码

cs 2 gadi atpakaļ
vecāks
revīzija
05e21e5fd8
23 mainītis faili ar 1662 papildinājumiem un 2 dzēšanām
  1. 107 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ContractController.java
  2. 80 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ContractDocumentController.java
  3. 52 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ContractTypeController.java
  4. 113 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Contract.java
  5. 106 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/ContractDocument.java
  6. 51 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/ContractType.java
  7. 18 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/vo/ContractFileDelVo.java
  8. 18 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/vo/ContractFileVo.java
  9. 16 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ContractDocumentMapper.java
  10. 18 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ContractMapper.java
  11. 16 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ContractTypeMapper.java
  12. 30 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ContractDocumentService.java
  13. 37 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ContractService.java
  14. 24 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ContractTypeService.java
  15. 216 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ContractDocumentServiceImpl.java
  16. 535 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ContractServiceImpl.java
  17. 115 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ContractTypeServiceImpl.java
  18. 9 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java
  19. 3 1
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/i18n/messages.properties
  20. 3 1
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/i18n/messages_en_US.properties
  21. 27 0
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ContractDocumentMapper.xml
  22. 51 0
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ContractMapper.xml
  23. 17 0
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ContractTypeMapper.xml

+ 107 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ContractController.java

@@ -0,0 +1,107 @@
+package com.management.platform.controller;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.management.platform.entity.Contract;
+import com.management.platform.entity.User;
+import com.management.platform.mapper.UserMapper;
+import com.management.platform.service.ContractService;
+import com.management.platform.service.ContractTypeService;
+import com.management.platform.util.HttpRespMsg;
+import org.springframework.http.HttpRequest;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-11-29
+ */
+@RestController
+@RequestMapping("/contract")
+public class ContractController {
+    @Resource
+    private ContractService contractService;
+    @Resource
+    private UserMapper userMapper;
+
+    /**
+     * 分页查询合同
+     */
+    @RequestMapping("/getContractPage")
+    public HttpRespMsg getContractPage (HttpServletRequest request, @RequestParam Integer pageIndex, @RequestParam Integer pageSize, String number,String name,String typeName,Integer status,String startDate,String endDate){
+        return contractService.getContractPage(request,pageIndex,pageSize,number,name,typeName,status,startDate,endDate);
+    }
+
+    /**
+     * 导出合同
+     */
+    @RequestMapping("/ExportContract")
+    public HttpRespMsg ExportContract (HttpServletRequest request, String number,String name,String typeName,Integer status,String startDate,String endDate){
+        return contractService.ExportContract(request,number,name,typeName,status,startDate,endDate);
+    }
+
+    /**
+     * 导入合同
+     */
+    @RequestMapping("/importContract")
+    public HttpRespMsg importContract (HttpServletRequest request, MultipartFile file){
+        return contractService.importContract(request,file);
+    }
+
+    /**
+     * 新增合同
+     */
+    @RequestMapping("/addContract")
+    public HttpRespMsg addContract (HttpServletRequest request,Contract contract){
+        return contractService.addContract(request,contract);
+    }
+
+    /**
+     * 编辑合同
+     */
+    @RequestMapping("/editContract")
+    public HttpRespMsg editContract (HttpServletRequest request,Contract contract){
+        return contractService.editContract(request,contract);
+    }
+
+    /**
+     * 审核合同
+     */
+    @RequestMapping("/processContract")
+    public HttpRespMsg processContract (HttpServletRequest request,Integer id,Integer status){
+        return contractService.processContract(request,id,status);
+    }
+
+    /**
+     * 删除合同
+     * @param request
+     * @param id
+     * @return
+     */
+    @RequestMapping("/deleteContract")
+    public HttpRespMsg deleteContract (HttpServletRequest request,Integer id){
+        return contractService.deleteContract(request,id);
+    }
+
+
+    /**
+     * 返回该合同的附件列表
+     */
+    @RequestMapping("/contractFile")
+    public HttpRespMsg contractFile (HttpServletRequest request,Integer id){
+        return contractService.contractFile(request,id);
+    }
+}
+

+ 80 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ContractDocumentController.java

@@ -0,0 +1,80 @@
+package com.management.platform.controller;
+
+
+import com.management.platform.entity.ContractDocument;
+import com.management.platform.entity.vo.ContractFileDelVo;
+import com.management.platform.entity.vo.ContractFileVo;
+import com.management.platform.service.ContractDocumentService;
+import com.management.platform.util.HttpRespMsg;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-12-09
+ */
+@RestController
+@RequestMapping("/contract-document")
+public class ContractDocumentController {
+    @Resource
+    private ContractDocumentService contractDocumentService;
+
+    /**
+     * 上传附件
+     * @param request
+     * @param ContractId
+     * @param folderId
+     * @param files
+     * @return
+     */
+    @RequestMapping("/fileUpload")
+    public HttpRespMsg fileUpload (HttpServletRequest request, @RequestParam Integer ContractId, @RequestParam(required=false) Integer folderId, @RequestParam("file") MultipartFile[] files){
+        return contractDocumentService.fileUpload(request,ContractId,folderId,files);
+    }
+
+    /**
+     * 下载文件
+     * @param request
+     * @param folderId
+     * @param contractFileVo
+     * @return
+     */
+    @RequestMapping("/fileDown")
+    public HttpRespMsg fileDown (HttpServletRequest request, HttpServletResponse response, @RequestParam(required=false) Integer folderId, ContractFileVo contractFileVo){
+        return contractDocumentService.fileDown(request,response,folderId,contractFileVo);
+    }
+
+    /**
+     * 删除文件
+     * @param request
+     * @param contractFileDelVo
+     * @return
+     */
+    @RequestMapping("/fileDelete")
+    public HttpRespMsg fileDelete (HttpServletRequest request, ContractFileDelVo contractFileDelVo){
+        return contractDocumentService.fileDelete(request,contractFileDelVo);
+    }
+
+    /**
+     * 在线预览
+     * @param inputFilePath
+     * @return
+     */
+    @RequestMapping("/onlineShow")
+    public HttpRespMsg onlineShow (@RequestParam String inputFilePath){
+        return contractDocumentService.onlineShow(inputFilePath);
+    }
+}
+

+ 52 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ContractTypeController.java

@@ -0,0 +1,52 @@
+package com.management.platform.controller;
+
+
+import com.management.platform.entity.ContractType;
+import com.management.platform.service.ContractTypeService;
+import com.management.platform.util.HttpRespMsg;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-11-29
+ */
+@RestController
+@RequestMapping("/contractType")
+public class ContractTypeController {
+    @Resource
+    private ContractTypeService contractTypeService;
+
+    /**
+     * 返回公司自定义合同类型
+     */
+    @RequestMapping("/getContractType")
+    public HttpRespMsg getContractType (HttpServletRequest request){
+        return contractTypeService.getContractType(request);
+    }
+
+    /**
+     * 新增、修改合同类型
+     */
+    @RequestMapping("/changeContractType")
+    public HttpRespMsg changeContractType (HttpServletRequest request, ContractType contractType){
+        return contractTypeService.changeContractType(request,contractType);
+    }
+
+    /**
+     * 删除合同类型
+     */
+    @RequestMapping("/deleteContractType")
+    public HttpRespMsg deleteContractType (HttpServletRequest request, Integer deleteId){
+        return contractTypeService.deleteContractType(request,deleteId);
+    }
+}
+

+ 113 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Contract.java

@@ -0,0 +1,113 @@
+package com.management.platform.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.baomidou.mybatisplus.annotation.TableId;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.springframework.format.annotation.DateTimeFormat;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-11-29
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class Contract extends Model<Contract> {
+
+    private static final long serialVersionUID=1L;
+
+    /**
+     * 合同表主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 公司id
+     */
+    @TableField("company_id")
+    private Integer companyId;
+
+    /**
+     * 创建者Id
+     */
+    @TableField("creator_id")
+    private String creatorId;
+
+    /**
+     * 合同编号
+     */
+    @TableField("number")
+    private String number;
+
+    /**
+     * 合同名称
+     */
+    @TableField("name")
+    private String name;
+
+    /**
+     * 金额
+     */
+    @TableField("amounts")
+    private Integer amounts;
+
+    /**
+     * 合同类型的id
+     */
+    @TableField("type_id")
+    private Integer typeId;
+
+    /**
+     * 合同类型的名称
+     */
+    @TableField(exist = false)
+    private String typeName;
+
+    /**
+     * 审核人Id
+     */
+    @TableField("checkerId")
+    private String checkerId;
+
+    /**
+     * 0-审核通过,1-待审核,2-驳回, 3-导入待审核
+     */
+    @TableField("status")
+    private Integer status;
+
+    /**
+     * 创建时间
+     */
+    @TableField("indate")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private LocalDate indate;
+
+    /**
+     * 备注
+     */
+    @TableField("remarks")
+    private String remarks;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+}

+ 106 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/ContractDocument.java

@@ -0,0 +1,106 @@
+package com.management.platform.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-12-09
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class ContractDocument extends Model<ContractDocument> {
+
+    private static final long serialVersionUID=1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 文件名
+     */
+    @TableField("document_name")
+    private String documentName;
+
+    /**
+     * 服务器生成的文件名
+     */
+    @TableField("server_name")
+    private String serverName;
+
+    /**
+     * 对外访问地址
+     */
+    @TableField("url")
+    private String url;
+
+    /**
+     * 创建人id
+     */
+    @TableField("creator_id")
+    private String creatorId;
+
+    /**
+     * 创建人姓名
+     */
+    @TableField("creator_name")
+    private String creatorName;
+
+    /**
+     * 创建时间
+     */
+    @TableField("indate")
+    private LocalDateTime indate;
+
+    /**
+     * 合同id
+     */
+    @TableField("contract_id")
+    private Integer contractId;
+
+    @TableField("folder_id")
+    private Integer folderId;
+
+    /**
+     * 文件大小
+     */
+    @TableField("size")
+    private String size;
+
+    /**
+     * 文件类型
+     */
+    @TableField("document_type")
+    private Integer documentType;
+
+    /**
+     * 文件状态0-存在,1-删除
+     */
+    @TableField("is_deleted")
+    private Integer isDeleted;
+
+    /**
+     * 是否是文件夹
+     */
+    @TableField("is_folder")
+    private Integer isFolder;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+}

+ 51 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/ContractType.java

@@ -0,0 +1,51 @@
+package com.management.platform.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-11-29
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class ContractType extends Model<ContractType> {
+
+    private static final long serialVersionUID=1L;
+
+    /**
+     * 合同类型id
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 公司id
+     */
+    @TableField("company_id")
+    private Integer companyId;
+
+    /**
+     * 合同类型
+     */
+    @TableField("type_name")
+    private String typeName;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+}

+ 18 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/vo/ContractFileDelVo.java

@@ -0,0 +1,18 @@
+package com.management.platform.entity.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author cs
+ * @version 1.0
+ * @ClassName contractFileDelVo
+ * @Description
+ * @date 2022-12-12 16:16
+ */
+@Data
+public class ContractFileDelVo {
+    private Integer contractId;
+    private List<Integer> fileIds;
+}

+ 18 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/vo/ContractFileVo.java

@@ -0,0 +1,18 @@
+package com.management.platform.entity.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author cs
+ * @version 1.0
+ * @ClassName contractFileVo
+ * @Description
+ * @date 2022-12-09 17:29
+ */
+@Data
+public class ContractFileVo {
+    private Integer ContractId;
+    private Integer fileId;
+}

+ 16 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ContractDocumentMapper.java

@@ -0,0 +1,16 @@
+package com.management.platform.mapper;
+
+import com.management.platform.entity.ContractDocument;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-12-09
+ */
+public interface ContractDocumentMapper extends BaseMapper<ContractDocument> {
+
+}

+ 18 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ContractMapper.java

@@ -0,0 +1,18 @@
+package com.management.platform.mapper;
+
+import com.management.platform.entity.Contract;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-11-29
+ */
+public interface ContractMapper extends BaseMapper<Contract> {
+    List<Contract> selectContract(Integer companyId, Integer pageStart, Integer pageSize, String number, String name, String typeName, Integer status, String startDate,String endDate);
+}

+ 16 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ContractTypeMapper.java

@@ -0,0 +1,16 @@
+package com.management.platform.mapper;
+
+import com.management.platform.entity.ContractType;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-11-29
+ */
+public interface ContractTypeMapper extends BaseMapper<ContractType> {
+
+}

+ 30 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ContractDocumentService.java

@@ -0,0 +1,30 @@
+package com.management.platform.service;
+
+import com.management.platform.entity.ContractDocument;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.management.platform.entity.vo.ContractFileDelVo;
+import com.management.platform.entity.vo.ContractFileVo;
+import com.management.platform.util.HttpRespMsg;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-12-09
+ */
+public interface ContractDocumentService extends IService<ContractDocument> {
+    HttpRespMsg fileUpload(HttpServletRequest request, @RequestParam Integer ContractId, @RequestParam(required=false) Integer folderId, @RequestParam("file") MultipartFile[] files);
+
+    HttpRespMsg fileDown(HttpServletRequest request, HttpServletResponse response, Integer folderId, ContractFileVo contractFileVo);
+
+    HttpRespMsg onlineShow(String inputFilePath);
+
+    HttpRespMsg fileDelete(HttpServletRequest request, ContractFileDelVo contractFileDelVo);
+}

+ 37 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ContractService.java

@@ -0,0 +1,37 @@
+package com.management.platform.service;
+
+import com.management.platform.entity.Contract;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.management.platform.util.HttpRespMsg;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-11-29
+ */
+public interface ContractService extends IService<Contract> {
+
+    HttpRespMsg getContractPage(HttpServletRequest request, @RequestParam Integer pageIndex, @RequestParam Integer pageSize, String number, String name, String typeName, Integer status, String startDate, String endDate);
+
+    HttpRespMsg ExportContract(HttpServletRequest request, String number, String name, String typeName, Integer status, String startDate, String endDate);
+
+    HttpRespMsg addContract(HttpServletRequest request, Contract contract);
+
+    HttpRespMsg editContract(HttpServletRequest request, Contract contract);
+
+    HttpRespMsg importContract(HttpServletRequest request, MultipartFile file);
+
+    HttpRespMsg processContract(HttpServletRequest request, Integer id, Integer status);
+
+    HttpRespMsg contractFile(HttpServletRequest request, Integer id);
+
+    HttpRespMsg deleteContract(HttpServletRequest request, Integer id);
+}

+ 24 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ContractTypeService.java

@@ -0,0 +1,24 @@
+package com.management.platform.service;
+
+import com.management.platform.entity.ContractType;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.management.platform.util.HttpRespMsg;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-11-29
+ */
+public interface ContractTypeService extends IService<ContractType> {
+
+    HttpRespMsg getContractType(HttpServletRequest request);
+
+    HttpRespMsg changeContractType(HttpServletRequest request, ContractType contractType);
+
+    HttpRespMsg deleteContractType(HttpServletRequest request, Integer deleteId);
+}

+ 216 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ContractDocumentServiceImpl.java

@@ -0,0 +1,216 @@
+package com.management.platform.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.management.platform.entity.Contract;
+import com.management.platform.entity.ContractDocument;
+import com.management.platform.entity.User;
+import com.management.platform.entity.vo.ContractFileDelVo;
+import com.management.platform.entity.vo.ContractFileVo;
+import com.management.platform.mapper.ContractDocumentMapper;
+import com.management.platform.mapper.ContractMapper;
+import com.management.platform.mapper.UserMapper;
+import com.management.platform.service.ContractDocumentService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.management.platform.util.*;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.IOException;
+import java.net.URLEncoder;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+import java.util.zip.ZipOutputStream;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-12-09
+ */
+@Service
+public class ContractDocumentServiceImpl extends ServiceImpl<ContractDocumentMapper, ContractDocument> implements ContractDocumentService {
+    @Resource
+    private ContractMapper contractMapper;
+    @Resource
+    private UserMapper userMapper;
+    @Resource
+    private ContractDocumentMapper contractDocumentMapper;
+    @Value(value = "${upload.path}")
+    private String path;
+    /**
+     * 上传合同附件
+     * @param request
+     * @param ContractId
+     * @param folderId
+     * @param files
+     * @return
+     */
+    @Override
+    public HttpRespMsg fileUpload(HttpServletRequest request, @RequestParam Integer ContractId, @RequestParam(required=false) Integer folderId, @RequestParam("file") MultipartFile[] files) {
+        HttpRespMsg msg = new HttpRespMsg();
+        User user = userMapper.selectById(request.getHeader("Token"));
+        for (MultipartFile file : files) {
+            ContractDocument record = new ContractDocument();
+            record.setCreatorId(user.getId());
+            record.setCreatorName(user.getName());
+            record.setDocumentName(file.getOriginalFilename());
+            record.setFolderId(folderId);
+            record.setContractId(ContractId);
+            if (file != null && !file.isEmpty()) {
+                //截取文件后缀
+                String fileSuffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
+                record.setDocumentType(DocumentTypeUtil.DocumentType(fileSuffix));
+                //处理文件
+                File dir = new File(path);
+                if (!dir.exists()) {
+                    dir.mkdir();
+                }
+                String fileName= "";
+                if (file!=null && !file.isEmpty()) {
+                    fileName = file.getOriginalFilename();
+
+                    int pos = fileName.lastIndexOf(".");
+                    String suffix = fileName.substring(pos).toLowerCase();
+                    //用uuid替换原始的文件名
+                    String purFName = UUID.randomUUID().toString().replaceAll("-", "");
+                    fileName = purFName + suffix;
+                    File saveFile = new File(dir, fileName);
+                    try {
+                        saveFile.createNewFile();
+                        file.transferTo(saveFile);
+                        //计算文件大小
+                        long fileSize = saveFile.length();
+                        String fileLength = FileUtil.getReadableFileSize(fileSize);
+                        record.setServerName(path + fileName);
+                        record.setSize(fileLength);
+                        String pathPrefix = "/upload/";
+                        record.setUrl(pathPrefix + fileName);
+                        contractDocumentMapper.insert(record);
+                        msg.data = record;
+                    } catch (IOException e) {
+                        e.printStackTrace();
+                        fileName = null;
+                        msg.setError(e.getMessage()+", path="+dir.getAbsolutePath());
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                        fileName = null;
+                        msg.setError(e.getMessage()+", path="+dir.getAbsolutePath());
+                    }
+                } else {
+                    msg.setError(MessageUtils.message("file.nonExistentError"));
+                }
+            }
+        }
+
+        return msg;
+    }
+
+    /**
+     * 下载文件
+     * @param request
+     * @param response
+     * @param folderId
+     * @param contractFileVo
+     * @return
+     */
+    @Override
+    public HttpRespMsg fileDown(HttpServletRequest request, HttpServletResponse response, Integer folderId, ContractFileVo contractFileVo) {
+        HttpRespMsg msg = new HttpRespMsg();
+        Integer fileId = contractFileVo.getFileId();
+        Integer contractId = contractFileVo.getContractId();
+        List<ContractDocument> files = contractDocumentMapper.selectList(new QueryWrapper<ContractDocument>().eq("contract_id", contractId));
+        try {
+            ServletOutputStream os = response.getOutputStream();
+            for (ContractDocument file : files) {
+                if (fileId.equals(file.getId())){
+                    File uploadFile = new File(file.getServerName());
+                    response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(file.getDocumentName(), "UTF-8"));
+                    response.setContentType("application/octet-stream");
+                    // 读取文件的字节流
+                    os.write(FileUtil.readFileByBytes(uploadFile));
+                    os.flush();
+                    os.close();
+                    break;
+                }
+            }
+        }catch (IOException e) {
+            msg.setError(MessageUtils.message("file.error"));
+            e.printStackTrace();
+        }
+        return msg;
+    }
+
+    @Override
+    public HttpRespMsg onlineShow(String inputFilePath) {
+        String destFileName = inputFilePath.substring(0, inputFilePath.lastIndexOf(".")+1)+"pdf";
+        File dir = new File(path);
+        if (!dir.exists()) {
+            dir.mkdir();
+        }
+
+        HttpRespMsg msg = new HttpRespMsg();
+        Map<String,String> map = new HashMap<String,String>();
+        File destFile = new File(dir, destFileName);
+        if(destFile.exists()) {
+            //文件已存在直接显示
+            map.put("pdfFileName", path + destFile.getName());
+        }else {
+            //文件不存在,转化后显示
+            OpenOfficeService service = new OpenOfficeService();
+            service.start();
+            File inputFile = new File(dir, inputFilePath);
+            Integer state = service.office2PDF(inputFile.getAbsolutePath(),destFile.getAbsolutePath());
+            if(state == 0){
+                //转换成功
+                map.put("pdfFileName", path + destFile.getName());
+            }else {
+                //转换失败
+            }
+            service.shutdown();
+        }
+        msg.data = map;
+        return msg;
+    }
+
+    /**
+     * 删除文件
+     * @param request
+     * @param contractFileDelVo
+     * @return
+     */
+    @Override
+    public HttpRespMsg fileDelete(HttpServletRequest request, ContractFileDelVo contractFileDelVo) {
+        HttpRespMsg msg = new HttpRespMsg();
+        User user = userMapper.selectById(request.getHeader("Token"));
+        Integer contractId = contractFileDelVo.getContractId();
+        List<Integer> fileIds = contractFileDelVo.getFileIds();
+        //删除文件,只有文件上传者和合同创建者才可以删除
+        Contract contract = contractMapper.selectById(contractId);
+        List<ContractDocument> contractDocuments = contractDocumentMapper.selectBatchIds(fileIds);
+        for (ContractDocument contractDocument : contractDocuments) {
+            if (user.getId().equals(contractDocument.getCreatorId()) || user.getId().equals(contract.getCreatorId())){
+                contractDocument.setIsDeleted(1);
+            }else {
+                //无权删除
+                msg.msg = "[" + contractDocument.getDocumentName() + "]" + MessageUtils.message("access.deleteError");
+                return msg;
+            }
+        }
+        for (ContractDocument contractDocument : contractDocuments) {
+            contractDocumentMapper.updateById(contractDocument);
+        }
+        msg.msg = MessageUtils.message("file.deleteSuc");
+        return msg;
+    }
+}

+ 535 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ContractServiceImpl.java

@@ -0,0 +1,535 @@
+package com.management.platform.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.management.platform.entity.*;
+import com.management.platform.mapper.*;
+import com.management.platform.service.ContractDocumentService;
+import com.management.platform.service.ContractService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.management.platform.service.ExcelExportService;
+import com.management.platform.util.*;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.EncryptedDocumentException;
+import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
+import org.apache.poi.ss.usermodel.*;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.io.*;
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-11-29
+ */
+@Service
+public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract> implements ContractService {
+    @Resource
+    private ContractTypeMapper contractTypeMapper;
+    @Resource
+    private ContractMapper contractMapper;
+    @Resource
+    private UserMapper userMapper;
+    @Resource
+    private CompanyMapper companyMapper;
+    @Resource
+    private LocaleInformationMapper localeInformationMapper;
+    @Resource
+    private ExcelExportService excelExportService;
+    @Resource
+    private WxCorpInfoMapper wxCorpInfoMapper;
+    @Resource
+    private ContractDocumentMapper contractDocumentMapper;
+    @Value(value = "${upload.path}")
+    private String path;
+
+    /**
+     * 分页查询合同
+     * @param request
+     * @param pageIndex
+     * @param pageSize
+     * @param number
+     * @param name
+     * @param typeName
+     * @param status
+     * @param startDate
+     * @param endDate
+     * @return
+     */
+    @Override
+    public HttpRespMsg getContractPage(HttpServletRequest request, @RequestParam Integer pageIndex, @RequestParam Integer pageSize, String number, String name, String typeName, Integer status, String startDate, String endDate) {
+        HttpRespMsg httpRespMsg = new HttpRespMsg();
+        try {
+            String token = request.getHeader("token");
+            User user = userMapper.selectById(token);
+            List<ContractType> types = contractTypeMapper.selectList(new QueryWrapper<ContractType>().eq("company_id", user.getCompanyId()));
+            if (types.size() == 0){
+                //String[] typeNames = {"买卖合同","赠与合同","租赁合同","借款合同","仓储合同","委托合同"};
+                String[] typeNames = {MessageUtils.message("contract.business"),MessageUtils.message("contract.gift"),MessageUtils.message("contract.lease"),MessageUtils.message("contract.loan"),MessageUtils.message("contract.warehousing"),MessageUtils.message("contract.entrust")};
+                for (String s : typeNames) {
+                    ContractType contractType = new ContractType();
+                    contractType.setCompanyId(user.getCompanyId());
+                    contractType.setTypeName(s);
+                    contractTypeMapper.insert(contractType);
+                }
+            }
+            Integer pageStart = null;
+            if (pageIndex!=null){
+                pageStart = (pageIndex -1) * pageSize;
+            }
+            if (StringUtils.isNotBlank(number)){
+                number = "%" + number + "%";
+            }
+            if (StringUtils.isNotBlank(name)){
+                name = "%" + name + "%";
+            }
+            if (StringUtils.isNotBlank(typeName)){
+                typeName = typeName;
+            }
+            List<Contract> contracts = contractMapper.selectContract(user.getCompanyId(), pageStart, pageSize, number, name , typeName , status, startDate,endDate);
+            List<Contract> total = contractMapper.selectContract(user.getCompanyId(), null, null, number, name, typeName, status, startDate, endDate);
+            for (Contract contract : contracts) {
+                List<ContractDocument> fileUrl = contractDocumentMapper.selectList(new QueryWrapper<ContractDocument>().eq("contract_id", id).eq("is_deleted",0));
+                List<User> users = userMapper.selectList(new QueryWrapper<User>().eq("company_id", user.getCompanyId()));
+                WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id", user.getCompanyId()));
+                for (ContractDocument contractDocument : fileUrl) {
+                    if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
+                        for (User item : users) {
+                            if (item.getId().equals(contractDocument.getCreatorId())){
+                                contractDocument.setCreatorName(item.getCorpwxUserid());
+                            }
+                        }
+                    }
+                }
+            }
+            HashMap<String, Object> map = new HashMap<>();
+            map.put("data",contracts);
+            map.put("total",total.size());
+            httpRespMsg.data = map;
+            return httpRespMsg;
+        }catch (NullPointerException e) {
+            //httpRespMsg.setError("验证失败");
+            httpRespMsg.setError(MessageUtils.message("access.verificationError"));
+            return httpRespMsg;
+        }
+    }
+
+    /**
+     * 导出合同
+     * @param request
+     * @param number
+     * @param name
+     * @param typeName
+     * @param status
+     * @param startDate
+     * @param endDate
+     * @return
+     */
+    @Override
+    public HttpRespMsg ExportContract(HttpServletRequest request, String number, String name, String typeName, Integer status, String startDate, String endDate) {
+        HttpRespMsg httpRespMsg = new HttpRespMsg();
+        User user = userMapper.selectById(request.getHeader("token"));
+        WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id", user.getCompanyId()));
+        HttpRespMsg contractPage = getContractPage(request, null, null, number, name, typeName, status, startDate, endDate);
+        List<Contract> data = (List<Contract>) contractPage.data;
+        List<String> headList = new ArrayList<String>();
+//        headList.add("合同编号");
+//        headList.add("合同名称");
+//        headList.add("合同金额(¥)");
+//        headList.add("合同类型");
+//        headList.add("状态");
+//        headList.add("创建时间");
+//        headList.add("备注");
+        headList.add(MessageUtils.message("entry.contractNo"));
+        headList.add(MessageUtils.message("contract.name"));
+        headList.add(MessageUtils.message("entry.contract"));
+        headList.add(MessageUtils.message("contract.type"));
+        headList.add(MessageUtils.message("leave.status"));
+        headList.add(MessageUtils.message("excel.creatTime"));
+        headList.add(MessageUtils.message("leave.task"));
+        ArrayList<List<String>> allList = new ArrayList<>();
+        allList.add(headList);
+        for (Contract contract : data) {
+            ArrayList<String> item = new ArrayList<>();
+            item.add(contract.getNumber()==null?"":contract.getNumber());
+            item.add(contract.getName());
+            item.add(contract.getAmounts()==null?"":contract.getAmounts().toString() + "元");
+            item.add(contract.getTypeName());
+            switch (contract.getStatus()){
+                case 0 :
+                    item.add("审核通过");
+                    break;
+                case 1 :
+                    item.add("待审核");
+                    break;
+                case 2 :
+                    item.add("驳回");
+                    break;
+                case 3 :
+                    item.add("导入待审核");
+                    break;
+                default:
+                    item.add("");
+            }
+            item.add(contract.getIndate().toString());
+            item.add(contract.getRemarks()==null?"":contract.getRemarks());
+            allList.add(item);
+        }
+        String fileName = MessageUtils.message("contract.export")+System.currentTimeMillis();
+        try {
+            return excelExportService.exportGeneralExcelByTitleAndList(wxCorpInfo,fileName,allList, path);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return httpRespMsg;
+    }
+
+    /**
+     * 新增合同
+     * @param request
+     * @param contract
+     * @return
+     */
+    @Override
+    public HttpRespMsg addContract(HttpServletRequest request, Contract contract) {
+        HttpRespMsg httpRespMsg = new HttpRespMsg();
+        User user = userMapper.selectById(request.getHeader("token"));
+        List<Contract> contracts = contractMapper.selectList(new QueryWrapper<Contract>().eq("company_id", user.getCompanyId()));
+        if (StringUtils.isBlank(contract.getName())){
+            //名称不可为空
+            httpRespMsg.setError(MessageUtils.message("name.nullNameError"));
+            return httpRespMsg;
+        }
+        //合同编号不可重复
+        if (StringUtils.isNotBlank(contract.getNumber())){
+            for (Contract ContractNumber: contracts) {
+                if (ContractNumber.getNumber() != null && ContractNumber.getNumber().equals(contract.getNumber())){
+                    httpRespMsg.setError("[" + ContractNumber.getNumber() + "]" + MessageUtils.message("contract.numberRepeat"));
+                    return httpRespMsg;
+                }
+            }
+        }
+        //合同金额不可为负
+        if (contract.getAmounts()!=null && contract.getAmounts() < 0){
+            httpRespMsg.msg = MessageUtils.message("Contract.amountNegative");
+            return httpRespMsg;
+        }
+        //若日期为空,则写入当前日期
+        if (contract.getIndate() == null){
+            contract.setIndate(LocalDate.now());
+        }
+        contract.setCreatorId(user.getId());
+        contract.setCompanyId(user.getCompanyId());
+        contractMapper.insert(contract);
+        httpRespMsg.msg = MessageUtils.message("contract.addSuc");
+        return httpRespMsg;
+    }
+
+    /**
+     * 编辑合同
+     * @param request
+     * @param contract
+     * @return
+     */
+    @Override
+    public HttpRespMsg editContract(HttpServletRequest request, Contract contract) {
+        HttpRespMsg httpRespMsg = new HttpRespMsg();
+        User user = userMapper.selectById(request.getHeader("token"));
+        try {
+            if (StringUtils.isBlank(contract.getName())){
+                //名称不可为空
+                httpRespMsg.setError(MessageUtils.message("name.nullNameError"));
+                return httpRespMsg;
+            }
+            //合同金额不可为负
+            if (contract.getAmounts()!=null && contract.getAmounts() < 0){
+                httpRespMsg.msg = MessageUtils.message("Contract.amountNegative");
+                return httpRespMsg;
+            }
+            //合同编号不可重复
+            if (StringUtils.isNotBlank(contract.getNumber())){
+                Contract number = contractMapper.selectOne(new QueryWrapper<Contract>().eq("number", contract.getNumber()));
+                if (number != null && !number.getId().equals(contract.getId())){
+                    httpRespMsg.setError("[" + contract.getNumber() + "]" + MessageUtils.message("contract.numberRepeat"));
+                    return httpRespMsg;
+                }
+            }
+            contractMapper.updateById(contract);
+            httpRespMsg.msg = MessageUtils.message("contract.editSuc");
+            return httpRespMsg;
+        }catch (NullPointerException e) {
+            //httpRespMsg.setError("验证失败");
+            httpRespMsg.setError(MessageUtils.message("access.verificationError"));
+            return httpRespMsg;
+        }
+    }
+
+    /**
+     * 导入合同
+     * @param request
+     * @param multipartFile
+     * @return
+     */
+    @Override
+    public HttpRespMsg importContract(HttpServletRequest request, MultipartFile multipartFile) {
+        HttpRespMsg msg = new HttpRespMsg();
+        String token = request.getHeader("TOKEN");
+        User user = userMapper.selectById(token);
+        WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id", user.getCompanyId()));
+        Integer companyId = wxCorpInfo.getCompanyId();
+        //然后处理文件
+        String fileName = multipartFile.getOriginalFilename();
+        File file = new File(fileName == null ? "file" : fileName);
+        InputStream inputStream = null;
+        OutputStream outputStream = null;
+        try {
+            inputStream = multipartFile.getInputStream();
+            outputStream = new FileOutputStream(file);
+            byte[] buffer = new byte[4096];
+            int temp = 0;
+            while ((temp = inputStream.read(buffer, 0, 4096)) != -1) {
+                outputStream.write(buffer, 0, temp);
+            }
+            inputStream.close();
+            outputStream.close();
+            //然后解析表格
+            Workbook workbook = WorkbookFactory.create(new FileInputStream(file));
+            //时间格式
+            DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/M/d");
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy/M/d");
+            Sheet sheet = workbook.getSheetAt(0);
+            int rowNum = sheet.getLastRowNum();
+            if (rowNum == 0) {
+                //msg.setError("请填写合同数据");
+                msg.setError(MessageUtils.message("Contract.dataNull"));
+                return msg;
+            }
+            List<Contract> contractList = contractMapper.selectList(new QueryWrapper<Contract>().eq("company_id", companyId));
+            List<ContractType> typeList = contractTypeMapper.selectList(new QueryWrapper<ContractType>().eq("company_id", companyId));
+            ArrayList<Contract> saveContract = new ArrayList<>();
+            for (int rowIndex = 1; rowIndex <= rowNum; rowIndex++) {
+                int cellIndex = 0;
+                int dataIndex = 1;
+                Row row = sheet.getRow(rowIndex);
+                if (row == null) {
+                    continue;
+                }
+                if (ExcelUtil.isRowEmpty(row)) {
+                    continue;
+                }
+                boolean NoExists = false;
+                boolean TypeExists = false;
+                if (row.getCell(cellIndex) != null) {
+                    row.getCell(cellIndex).setCellType(CellType.STRING);
+                }
+                if (row.getCell(1) == null) {
+                    //msg.setError("第"+dataIndex+"行缺少合同名称");
+                    msg.setError(MessageUtils.message("",dataIndex));
+                    return msg;
+                }
+                String No = row.getCell(0).getStringCellValue().trim();
+                String name = row.getCell(1).getStringCellValue().trim();
+                String amounts = row.getCell(2).getStringCellValue().trim();
+                String type = row.getCell(3).getStringCellValue().trim();
+                String remarks = row.getCell(3).getStringCellValue().trim();
+                Contract item = new Contract();
+                //检查合同编号是否存在
+                if (StringUtils.isNotBlank(No)){
+                    for (Contract contract : contractList) {
+                        if (contract.getNumber().equals(No)){
+                            NoExists = true;
+                            break;
+                        }
+                    }
+                    if (NoExists){
+                        //msg.setError("第"+dataIndex+"行合同编号已存在");
+                        msg.setError(MessageUtils.message("Contract.NoExists",dataIndex));
+                        return msg;
+                    }
+                    for (int i = 0; i < saveContract.size(); i++) {
+                        if (saveContract.get(i).getNumber().equals(No)){
+                            //msg.setError("第"+dataIndex+"行合同编号与第"第"+dataIndex+"行合同编号重复);
+                            msg.setError(MessageUtils.message("Contract.NoRepeat",dataIndex,i+1));
+                            return msg;
+                        }
+                    }
+                    item.setNumber(No);
+                }
+                //检查类型名称是否存在
+                if (StringUtils.isNotBlank(type)){
+                    for (ContractType contractType : typeList) {
+                        if (contractType.getTypeName().equals(type)){
+                            TypeExists = true;
+                            break;
+                        }
+                    }
+                    if (!TypeExists){
+                        //msg.setError("第"+dataIndex+"行和合同类型不存在");
+                        msg.setError(MessageUtils.message("Contract.typeExists",dataIndex));
+                        return msg;
+                    }
+                    item.setName(name);
+                }
+                item.setCompanyId(companyId);
+                item.setCreatorId(user.getId());
+                item.setIndate(LocalDate.now());
+                item.setStatus(3);
+                item.setAmounts(Integer.parseInt(amounts));
+                item.setRemarks(remarks);
+                saveContract.add(item);
+            }
+            if(saveContract.size()>0){
+                int i = 0;
+                for (Contract contract : saveContract) {
+                    contractMapper.insert(contract);
+                    i++;
+                }
+                msg.data = i;
+                String originName = fileName;
+                //定义一个独立的文件夹
+                String importFolder = "contract_import";
+                File dir = new File(path, importFolder);
+                if (!dir.exists()) {
+                    dir.mkdir();
+                }
+
+                System.out.println("fileName=="+originName);
+                String[] names = originName.split("\\.");
+                String destFileName = names[0] + "_"+System.currentTimeMillis()+"."+names[1];
+                File destFile = new File(dir, destFileName);
+                FileUtils.copyFile(file, destFile);
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+            //msg.setError("文件处理出错");
+            msg.setError(MessageUtils.message("file.error"));
+            return msg;
+        } catch (NullPointerException e) {
+            e.printStackTrace();
+            //msg.setError("数据格式有误或存在空数据 导入失败");
+            msg.setError(MessageUtils.message("file.dataFormatError"));
+            return msg;
+        }catch (InvalidFormatException e) {
+            e.printStackTrace();
+            //msg.setError("文件格式错误,如果安装了加密软件需要先解密再上传");
+            msg.setError(MessageUtils.message("file.FormatErrorAndDecrypt"));
+            return msg;
+        }catch (EncryptedDocumentException e) {
+            e.printStackTrace();
+            //msg.setError("文件加密状态,需要先解除加密状态再上传");
+            msg.setError(MessageUtils.message("file.encryption"));
+            return msg;
+        } catch (Exception e) {
+            e.printStackTrace();
+            //msg.setError("发生其他错误:"+e.getMessage());
+            msg.setError(MessageUtils.message("other.errorByParameter",e.getMessage()));
+            return msg;
+        } finally {
+            //关闭流
+            try {
+                if (outputStream != null && inputStream != null) {
+                    outputStream.close();
+                    inputStream.close();
+                }
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+            file.delete();
+        }
+        return msg;
+    }
+
+    /**
+     * 合同审核
+     * @param request
+     * @param id
+     * @param status
+     * @return
+     */
+    @Override
+    public HttpRespMsg processContract(HttpServletRequest request, Integer id, Integer status) {
+        HttpRespMsg msg = new HttpRespMsg();
+        String token = request.getHeader("TOKEN");
+        User user = userMapper.selectById(token);
+        Contract contract = new Contract();
+        contract.setId(id);
+        contract.setCheckerId(user.getId());
+        contract.setStatus(status);
+        contractMapper.updateById(contract);
+        return msg;
+    }
+
+    /**
+     * 返回合同的附件列表
+     * @param request
+     * @param id
+     * @return
+     */
+    @Override
+    public HttpRespMsg contractFile(HttpServletRequest request, Integer id) {
+        HttpRespMsg msg = new HttpRespMsg();
+        String token = request.getHeader("TOKEN");
+        User user = userMapper.selectById(token);
+        List<ContractDocument> fileUrl = contractDocumentMapper.selectList(new QueryWrapper<ContractDocument>().eq("contract_id", id).eq("is_deleted",0));
+        List<User> users = userMapper.selectList(new QueryWrapper<User>().eq("company_id", user.getCompanyId()));
+        WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id", user.getCompanyId()));
+        for (ContractDocument contractDocument : fileUrl) {
+            if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
+                for (User item : users) {
+                    if (item.getId().equals(contractDocument.getCreatorId())){
+                        contractDocument.setCreatorName(item.getCorpwxUserid());
+                    }
+                }
+            }
+        }
+        msg.data = fileUrl;
+        return msg;
+    }
+
+    /**
+     * 删除合同
+     * @param request
+     * @param id
+     * @return
+     */
+    @Override
+    public HttpRespMsg deleteContract(HttpServletRequest request, Integer id) {
+        HttpRespMsg msg = new HttpRespMsg();
+        String token = request.getHeader("TOKEN");
+        User user = userMapper.selectById(token);
+        //只有创建者才可以删除
+        Contract contract = contractMapper.selectById(id);
+        if (user.getId().equals(contract.getCreatorId())){
+            contractMapper.deleteById(id);
+            //删除附件
+            List<ContractDocument> contractFile = contractDocumentMapper.selectList(new QueryWrapper<ContractDocument>().eq("contract_id", id));
+            for (ContractDocument contractDocument : contractFile) {
+                contractDocument.setIsDeleted(1);
+            }
+            for (ContractDocument contractDocument : contractFile) {
+                contractDocumentMapper.updateById(contractDocument);
+            }
+            msg.msg = MessageUtils.message("other.deleteScu");
+        }else {
+            msg.msg = MessageUtils.message("access.createDelete");
+        }
+        return msg;
+    }
+
+}

+ 115 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ContractTypeServiceImpl.java

@@ -0,0 +1,115 @@
+package com.management.platform.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.management.platform.entity.*;
+import com.management.platform.mapper.*;
+import com.management.platform.service.ContractTypeService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.management.platform.service.ExcelExportService;
+import com.management.platform.util.HttpRespMsg;
+import com.management.platform.util.MessageUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.util.*;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-11-29
+ */
+@Service
+public class ContractTypeServiceImpl extends ServiceImpl<ContractTypeMapper, ContractType> implements ContractTypeService {
+    @Resource
+    private ContractTypeMapper contractTypeMapper;
+    @Resource
+    private ContractMapper contractMapper;
+    @Resource
+    private UserMapper userMapper;
+    @Resource
+    private CompanyMapper companyMapper;
+    @Resource
+    private LocaleInformationMapper localeInformationMapper;
+    @Resource
+    private ExcelExportService excelExportService;
+    @Resource
+    private WxCorpInfoMapper wxCorpInfoMapper;
+
+    /**
+     * 返回公司自定义合同类型
+     * @param request
+     * @return
+     */
+    @Override
+    public HttpRespMsg getContractType(HttpServletRequest request) {
+        String token = request.getHeader("token");
+        User user = userMapper.selectById(token);
+        List<ContractType> types = contractTypeMapper.selectList(new QueryWrapper<ContractType>().eq("company_id", user.getCompanyId()));
+        HttpRespMsg httpRespMsg = new HttpRespMsg();
+        httpRespMsg.data = types;
+        return httpRespMsg;
+    }
+
+    /**
+     * 新增、修改合同类型
+     * @param request
+     * @param contractType
+     * @return
+     */
+    @Override
+    public HttpRespMsg changeContractType(HttpServletRequest request, ContractType contractType) {
+        HttpRespMsg httpRespMsg = new HttpRespMsg();
+        String token = request.getHeader("token");
+        User user = userMapper.selectById(token);
+        if (StringUtils.isBlank(contractType.getTypeName())){
+            //合同类型名不可为空
+            httpRespMsg.setError(MessageUtils.message("contract.typeNameEmpty"));
+            return httpRespMsg;
+        }
+        List<ContractType> types = contractTypeMapper.selectList(new QueryWrapper<ContractType>().eq("company_id", user.getCompanyId()));
+        //新增或修改自定义类型
+        for (ContractType type : types) {
+            if (type.getTypeName().equals(contractType.getTypeName()) && !type.getId().equals(contractType.getId())){
+                //类型名不可重复
+                httpRespMsg.setError("[" + type.getTypeName() + "]" + MessageUtils.message("contract.typeNameRepeat"));
+                return httpRespMsg;
+            }
+        }
+        if (contractType.getId() == null){
+            contractType.setCompanyId(user.getCompanyId());
+            contractTypeMapper.insert(contractType);
+        }else {
+            contractType.setCompanyId(null);
+            contractTypeMapper.updateById(contractType);
+        }
+        //操作成功
+        httpRespMsg.msg = MessageUtils.message("contract.operationSuc");
+        return httpRespMsg;
+    }
+
+    /**
+     * 删除合同类型
+     * @param request
+     * @param deleteId
+     * @return
+     */
+    @Override
+    public HttpRespMsg deleteContractType(HttpServletRequest request, Integer deleteId) {
+        HttpRespMsg httpRespMsg = new HttpRespMsg();
+        List<Contract> types = contractMapper.selectList(new QueryWrapper<Contract>().eq("type_id", deleteId));
+        if (types.size() > 0){
+            //该类型尚有合同在使用,无法删除!
+            httpRespMsg.msg = MessageUtils.message("Contract.typeDelError");
+        }else {
+            contractTypeMapper.deleteById(deleteId);
+            httpRespMsg.msg = MessageUtils.message("file.deleteSuc");
+        }
+        return httpRespMsg;
+    }
+
+}

+ 9 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -845,6 +845,15 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 reportAuditorSettingService.saveOrUpdateBatch(collect);
             }
         }
+        //插入所有动态和任务进展
+        ArrayList<TaskComment> taskComments = new ArrayList<>();
+        ArrayList<TaskProgress> taskProgresses = new ArrayList<>();
+        for (Report report : reportList) {
+            TaskComment taskComment = new TaskComment();
+            taskComment.setCreateTime(LocalDateTime.now());
+//            taskComment.setUserName(report.get);
+        }
+
         return httpRespMsg;
     }
 

+ 3 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/resources/i18n/messages.properties

@@ -760,4 +760,6 @@ Contract.dataNull = 请填写合同数据
 Contract.nameNullError=第{0}行缺少合同名称
 Contract.NoExists=第{0}行合同编号已存在
 Contract.NoRepeat=第{0}行合同编号与第{1}行合同编号重复
-Contract.typeExists=第{0}行合同类型不存在
+Contract.typeExists=第{0}行合同类型不存在
+Contract.amountNegative = 合同金额不可为负
+Contract.typeDelError = 该类型尚有合同在使用,无法删除!

+ 3 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/resources/i18n/messages_en_US.properties

@@ -760,4 +760,6 @@ Contract.dataNull = Please fill in the contract data
 Contract.nameNullError=The contract name is missing in row {0}
 Contract.NoExists=Contract No. in row {0} already exists
 Contract.NoRepeat=The contract number in line {0} is duplicate with that in line {1}
-Contract.typeExists=The contract type in row {0} does not exist
+Contract.typeExists=The contract type in row {0} does not exist
+Contract.amountNegative = The contract amount cannot be negative
+Contract.typeDelError = This type is still in use and cannot be deleted!

+ 27 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ContractDocumentMapper.xml

@@ -0,0 +1,27 @@
+<?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="com.management.platform.mapper.ContractDocumentMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.management.platform.entity.ContractDocument">
+        <id column="id" property="id" />
+        <result column="document_name" property="documentName" />
+        <result column="server_name" property="serverName" />
+        <result column="url" property="url" />
+        <result column="creator_id" property="creatorId" />
+        <result column="creator_name" property="creatorName" />
+        <result column="indate" property="indate" />
+        <result column="contract_id" property="contractId" />
+        <result column="folder_id" property="folderId" />
+        <result column="size" property="size" />
+        <result column="document_type" property="documentType" />
+        <result column="is_deleted" property="isDeleted" />
+        <result column="is_folder" property="isFolder" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, document_name, server_name, url, creator_id, creator_name, indate, contract_id, folder_id, size, document_type, is_deleted, is_folder
+    </sql>
+
+</mapper>

+ 51 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ContractMapper.xml

@@ -0,0 +1,51 @@
+<?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="com.management.platform.mapper.ContractMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.management.platform.entity.Contract">
+        <id column="id" property="id" />
+        <result column="company_id" property="companyId" />
+        <result column="number" property="number" />
+        <result column="creator_id" property="creatorId" />
+        <result column="name" property="name" />
+        <result column="amounts" property="amounts" />
+        <result column="type_id" property="typeId" />
+        <result column="type_name" property="typeName" />
+        <result column="status" property="status" />
+        <result column="indate" property="indate" />
+        <result column="remarks" property="remarks" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, company_id, creator_id, number, name, amounts, type_id, type_name,status, indate, remarks
+    </sql>
+
+    <select id="selectContract" resultType="com.management.platform.entity.Contract">
+        select contract.id,contract.company_id,contract.creator_id,contract.number,contract.name,contract.amounts,contract.type_id,contract_type.type_name,contract.status,contract.indate,contract.remarks
+        from contract
+        left join contract_type
+        on contract.type_id = contract_type.id
+        where contract.company_id = #{companyId}
+        <if test="number!=null">
+        and number like #{number}
+        </if>
+        <if test="name!=null">
+        and name like #{name}
+        </if>
+        <if test="typeName!=null">
+        and contract_type.id = #{typeName}
+        </if>
+        <if test="status!=null">
+        and status = #{status}
+        </if>
+        <if test="startDate!=null and endDate !=null">
+        and indate between #{startDate} and #{endDate}
+        </if>
+        order by indate desc
+        <if test="pageStart!=null and pageSize!=null">
+            limit #{pageStart},#{pageSize}
+        </if>
+    </select>
+</mapper>

+ 17 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ContractTypeMapper.xml

@@ -0,0 +1,17 @@
+<?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="com.management.platform.mapper.ContractTypeMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.management.platform.entity.ContractType">
+        <id column="id" property="id" />
+        <result column="company_id" property="companyId" />
+        <result column="type_name" property="typeName" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, company_id, type_name
+    </sql>
+
+</mapper>