Browse Source

Merge branch 'develop' of http://132.232.206.88:3000/lift-manager/lift-server into huangyuan-user

黄远 5 năm trước cách đây
mục cha
commit
1262663b39
15 tập tin đã thay đổi với 341 bổ sung159 xóa
  1. 4 3
      lift-business-service/src/main/java/cn/com/ty/lift/business/library/controller/LiftController.java
  2. 32 3
      lift-business-service/src/main/java/cn/com/ty/lift/business/library/dao/entity/Lift.java
  3. 5 4
      lift-business-service/src/main/java/cn/com/ty/lift/business/library/dao/entity/model/request/LiftExtensionRequest.java
  4. 35 2
      lift-business-service/src/main/java/cn/com/ty/lift/business/library/service/LiftService.java
  5. 7 4
      lift-business-service/src/main/java/cn/com/ty/lift/business/maintenance/controller/MaintenanceRecordController.java
  6. 1 1
      lift-business-service/src/main/java/cn/com/ty/lift/business/maintenance/dao/entity/model/response/MtRecordResponse.java
  7. 82 67
      lift-business-service/src/main/java/cn/com/ty/lift/business/maintenance/service/MaintenanceRecordService.java
  8. 6 1
      lift-business-service/src/main/resources/mapper/project/ProjectMapper.xml
  9. 7 43
      lift-enterprise-service/src/main/java/cn/com/ty/lift/enterprise/oa/controller/AttendanceController.java
  10. 2 2
      lift-enterprise-service/src/main/java/cn/com/ty/lift/enterprise/oa/dto/AttendanceRequest.java
  11. 9 0
      lift-enterprise-service/src/main/java/cn/com/ty/lift/enterprise/oa/dto/AttendanceResponse.java
  12. 4 0
      lift-enterprise-service/src/main/java/cn/com/ty/lift/enterprise/oa/mapper/AttendanceMapper.java
  13. 119 6
      lift-enterprise-service/src/main/java/cn/com/ty/lift/enterprise/oa/service/AttendanceService.java
  14. 8 7
      lift-enterprise-service/src/main/resources/mapper/oa/AttendanceMapper.xml
  15. 20 16
      lift-system-service/src/main/java/cn/com/ty/lift/system/user/service/impl/UserApplicationService.java

+ 4 - 3
lift-business-service/src/main/java/cn/com/ty/lift/business/library/controller/LiftController.java

@@ -175,9 +175,9 @@ public class LiftController {
      * @date 2019/11/27 10:03 AM
      */
     @PostMapping("add")
-    @Validation(fields = {"mtCompanyId", "source", "mark"})
     public RestResponse add(@Val @RequestBody LiftExtensionRequest request) {
-        Validator.valid(request.getLift(), "registrationCode");
+        Validator.valid(request,"mtCompanyId", "source", "mark","workerId","lift");
+        liftService.validLiftRequest(request.getLift());
         return liftService.add(request);
     }
 
@@ -188,9 +188,10 @@ public class LiftController {
      * @date 2019/11/27 10:03 AM
      */
     @PostMapping("modify")
-    @Validation(fields = {"mtCompanyId"})
     public RestResponse modify(@Val @RequestBody LiftRequest request) {
+        Validator.valid(request,"mtCompanyId" ,"workerId","lift");
         Validator.valid(request.getLift(), "id");
+        liftService.validLiftRequest(request.getLift());
        return liftService.modify(request);
     }
 

+ 32 - 3
lift-business-service/src/main/java/cn/com/ty/lift/business/library/dao/entity/Lift.java

@@ -7,13 +7,13 @@ import com.baomidou.mybatisplus.annotation.TableId;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
+import javax.validation.constraints.*;
 import java.math.BigDecimal;
 import java.time.LocalDate;
 
 /**
  * 实体类 - 表:lift 电梯
+ *
  * @author bieao
  * @since 2019-11-25 17:37:16
  */
@@ -24,7 +24,7 @@ public class Lift extends BaseEntity {
     /**
      * 电梯id
      */
-    @TableId(value = "id",type = IdType.ID_WORKER)
+    @TableId(value = "id", type = IdType.ID_WORKER)
     @NotNull(message = "电梯id不能为空")
     private Long id;
 
@@ -39,12 +39,18 @@ public class Lift extends BaseEntity {
      * 电梯类别(1:曳引梯;2:液压梯;3:杂物梯;4:自动扶梯;5:自动人行道)
      */
     @FieldName(name = "电梯类别")
+    @Min(value = 1, message = "电梯类别错误")
+    @Max(value = 5, message = "电梯类别错误")
+    @NotNull(message = "电梯类别不能为空")
     private Integer category;
 
     /**
      * 电梯类型(1:直梯;2:扶梯)
      */
     @FieldName(name = "电梯类型")
+    @Min(value = 1, message = "电梯类型错误")
+    @Max(value = 2, message = "电梯类型错误")
+    @NotNull(message = "电梯类型不能为空")
     private Integer liftType;
 
     /**
@@ -69,18 +75,23 @@ public class Lift extends BaseEntity {
      * 设备用途(11:货梯;12:客梯;13:医梯;14:观光梯;15:杂物梯;16:别墅梯;21:扶梯;22:人行道)
      */
     @FieldName(name = "设备用途")
+    @Min(value = 11, message = "设备用途错误")
+    @Max(value = 22, message = "设备用途错误")
+    @NotNull(message = "设备用途不能为空")
     private Integer deviceUsage;
 
     /**
      * 电梯品牌
      */
     @FieldName(name = "电梯品牌")
+    @NotBlank(message = "电梯品牌不能为空")
     private String liftBrand;
 
     /**
      * 安装单位
      */
     @FieldName(name = "安装单位")
+    @NotBlank(message = "安装单位不能为空")
     private String installCompany;
 
     /**
@@ -111,54 +122,65 @@ public class Lift extends BaseEntity {
      * 电梯载重
      */
     @FieldName(name = "电梯载重")
+    @NotNull(message = "电梯载重不能为空")
     private Integer ratedLoad;
 
     /**
      * 提升高度m
      */
     @FieldName(name = "提升高度")
+    @NotNull(message = "提升高度不能为空")
     private BigDecimal promoteHeight;
 
     /**
      * 梯级宽度
      */
     @FieldName(name = "梯级宽度")
+    @NotNull(message = "梯级宽度不能为空")
     private BigDecimal stepWidth;
 
     /**
      * 人行道长度m
      */
     @FieldName(name = "人行道长度")
+    @NotNull(message = "人行道长度不能为空")
     private BigDecimal sidewalkLength;
 
     /**
      * 倾斜角度°
      */
     @FieldName(name = "倾斜角度")
+    @NotNull(message = "倾斜角度不能为空")
     private BigDecimal tiltAngle;
 
     /**
      * 电动机功率kw
      */
     @FieldName(name = "电动机功率")
+    @NotNull(message = "电动机功率不能为空")
     private BigDecimal motorPower;
 
     /**
      * 额定速度m/s
      */
     @FieldName(name = "额定速度")
+    @NotNull(message = "额定速度不能为空")
     private BigDecimal ratedSpeed;
 
     /**
      * 层站门
      */
     @FieldName(name = "层站门")
+    @NotBlank(message = "层站门不能为空")
     private String layerStationDoor;
 
     /**
      * 安全钳类型(1:瞬时式安全钳;2:渐进式安全钳)
      */
     @FieldName(name = "安全钳类型")
+    @Min(value = 1, message = "安全钳类型错误")
+    @Max(value = 2, message = "安全钳类型错误")
+    @NotNull(message = "安全钳类型不能为空")
     private Integer clampType;
 
     /**
@@ -171,6 +193,7 @@ public class Lift extends BaseEntity {
      * 设备使用地点
      */
     @FieldName(name = "设备使用地点")
+    @NotBlank(message = "设备安装地址不能为空")
     private String devicePosition;
 
     /**
@@ -195,6 +218,7 @@ public class Lift extends BaseEntity {
      * 油缸型式
      */
     @FieldName(name = "油缸型式")
+    @NotBlank(message = "油缸型式不能为空")
     private String cylinderType;
 
     /**
@@ -207,12 +231,14 @@ public class Lift extends BaseEntity {
      * 顶升型式
      */
     @FieldName(name = "顶升型式")
+    @NotNull(message = "顶升型式不能为空")
     private Integer topType;
 
     /**
      * 控制方式
      */
     @FieldName(name = "控制方式")
+    @NotNull(message = "控制方式不能为空")
     private String controlType;
 
     /**
@@ -237,6 +263,7 @@ public class Lift extends BaseEntity {
      * 单位设备编号
      */
     @FieldName(name = "单位设备编号")
+    @NotBlank(message = "设备内部编号不能为空")
     private String useCompanyCode;
 
     /**
@@ -261,6 +288,7 @@ public class Lift extends BaseEntity {
      * 设备安装日期
      */
     @FieldName(name = "设备安装日期")
+    @NotNull(message = "设备安装日期不能为空")
     private LocalDate installDate;
 
     /**
@@ -273,6 +301,7 @@ public class Lift extends BaseEntity {
      * 年检日期
      */
     @FieldName(name = "年检日期")
+    @NotNull(message = "年检日期不能为空")
     private LocalDate annualInspectionDate;
 
     /**

+ 5 - 4
lift-business-service/src/main/java/cn/com/ty/lift/business/library/dao/entity/model/request/LiftExtensionRequest.java

@@ -16,6 +16,7 @@ public class LiftExtensionRequest {
     /**
      * 维保工
      */
+    @NotNull(message = "维保工不能为空")
     private Long workerId;
 
     /**
@@ -26,19 +27,19 @@ public class LiftExtensionRequest {
     /**
      * 新增电梯来源入口 (0:从电梯管理新增,1:从项目管理中新增)
      */
-    @NotNull(message = "notEmpty")
+    @NotNull(message = "电梯来源入口不能为空")
     private String source;
 
     /**
      * 新增标记 (0:新增,1:查询后带入)
      */
-    @NotNull(message = "notEmpty")
+    @NotNull(message = "新增标记不能为空")
     private String mark;
 
     /**
      * 维保公司ID
      */
-    @NotNull(message = "notEmpty")
+    @NotNull(message = "维保公司ID不能为空")
     private Long mtCompanyId;
 
     /**
@@ -49,6 +50,6 @@ public class LiftExtensionRequest {
     /**
      * 电梯
      */
-    @NotNull(message = "notEmpty")
+    @NotNull(message = "电梯信息不能为空")
     private Lift lift;
 }

+ 35 - 2
lift-business-service/src/main/java/cn/com/ty/lift/business/library/service/LiftService.java

@@ -33,6 +33,8 @@ import cn.com.ty.lift.common.model.PushUserInfo;
 import cn.com.ty.lift.common.utils.DateUtils;
 import cn.com.ty.lift.common.utils.SendMessageUtil;
 import cn.com.ty.lift.common.verify.Validate;
+import cn.com.ty.lift.common.verify.ValidateException;
+import cn.com.ty.lift.common.verify.Validator;
 import cn.com.xwy.boot.web.dto.RestResponse;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
@@ -101,7 +103,7 @@ public class LiftService extends ServiceImpl<LiftMapper, Lift> {
     @Resource
     private MaintenancePlanService maintenancePlanService;
 
-    private Map<String, String> headsMap = new LinkedHashMap<String,String>() {{
+    private Map<String, String> headsMap = new LinkedHashMap<String, String>() {{
         put("liftCode", "电梯号");
         put("registrationCode", "注册代码");
         put("liftBrand", "电梯品牌");
@@ -480,7 +482,7 @@ public class LiftService extends ServiceImpl<LiftMapper, Lift> {
         return RestResponse.success(null, MessageUtils.get("msg.modify.success"));
     }
 
-    public List<Map<String,String>> exportList(List<String> ids){
+    public List<Map<String, String>> exportList(List<String> ids) {
         return baseMapper.exportList(ids);
     }
 
@@ -736,4 +738,35 @@ public class LiftService extends ServiceImpl<LiftMapper, Lift> {
         return true;
     }
 
+    /**
+     * 检查新增和编辑电梯时必传的属性
+     *
+     * @param lift 电梯信息
+     */
+    public void validLiftRequest(Lift lift) {
+        Validator.valid(lift, "registrationCode", "category", "liftType", "deviceUsage", "liftBrand",
+                "devicePosition", "useCompanyCode", "installDate", "annualInspectionDate");
+
+        if (lift.getInstallDate().compareTo(lift.getAnnualInspectionDate()) > 0) {
+            throw new ValidateException("设备年检日期不能在安装日期之前");
+        }
+
+        switch (lift.getCategory()) {
+            case 1:
+                Validator.valid(lift, "layerStationDoor", "clampType", "ratedLoad", "promoteHeight", "ratedSpeed");
+                break;
+            case 2:
+                Validator.valid(lift, "ratedLoad", "promoteHeight", "motorPower", "ratedSpeed", "layerStationDoor",
+                        "clampType", "controlType", "cylinderNum", "cylinderType", "topType");
+                break;
+            case 3:
+                Validator.valid(lift, "ratedLoad", "promoteHeight", "motorPower", "ratedSpeed", "layerStationDoor", "clampType");
+                break;
+            case 4:
+                Validator.valid(lift, "ratedLoad", "promoteHeight", "stepWidth", "tiltAngle");
+                break;
+            case 5:
+                Validator.valid(lift, "ratedLoad", "promoteHeight", "stepWidth", "tiltAngle", "sidewalkLength");
+        }
+    }
 }

+ 7 - 4
lift-business-service/src/main/java/cn/com/ty/lift/business/maintenance/controller/MaintenanceRecordController.java

@@ -164,10 +164,13 @@ public class MaintenanceRecordController {
 
     private MtRecordResponse getMtRecordResponse(@RequestBody @Val MtRecordRequest request) {
         MtRecordResponse entity = maintenanceRecordService.infoById(request);
-        String repairDuration = maintenanceRecordService.getRepairDuration(entity.getRepairDiff());
+        String repairDuration = "";
+        if (entity.getRepairDiff() != null) {
+            repairDuration = maintenanceRecordService.getRepairDuration(entity.getRepairDiff());
+        }
         entity.setRepairDuration(repairDuration);
         Validate.notNull(entity, ValuePool.MAINTENANCE_RECORD_NOT_EXIST);
-        /**
+        /*
          * 维保项id:0/1/2, 0:无需保养,1:已保养,2:需要更换
          * 保养项目  用键值对的方式存储,如(1:0,2:1,3:1...)
          */
@@ -415,7 +418,7 @@ public class MaintenanceRecordController {
 
     @PostMapping("export")
     @Validation(fields = {"recordIds"})
-    public void export(@Val @RequestBody MtRecordRequest mtRecordRequest, HttpServletResponse response) {
-        maintenanceRecordService.export(mtRecordRequest, response);
+    public RestResponse<?> export(@Val @RequestBody MtRecordRequest mtRecordRequest) {
+       return RestResponse.success(maintenanceRecordService.export(mtRecordRequest));
     }
 }

+ 1 - 1
lift-business-service/src/main/java/cn/com/ty/lift/business/maintenance/dao/entity/model/response/MtRecordResponse.java

@@ -72,7 +72,7 @@ public class MtRecordResponse extends MaintenanceRecord {
     /**
      * 保养时长分钟数
      */
-    private int repairDiff;
+    private Integer repairDiff;
 
     private String repairDuration;
 

+ 82 - 67
lift-business-service/src/main/java/cn/com/ty/lift/business/maintenance/service/MaintenanceRecordService.java

@@ -21,12 +21,14 @@ import cn.com.ty.lift.business.project.dao.entity.Project;
 import cn.com.ty.lift.business.project.dao.entity.ProjectLiftRelevance;
 import cn.com.ty.lift.business.project.service.ProjectLiftRelevanceService;
 import cn.com.ty.lift.business.project.service.ProjectService;
+import cn.com.ty.lift.common.aliservice.aliyunoss.AliyunOSS;
 import cn.com.ty.lift.common.constants.CommonEnum;
 import cn.com.ty.lift.common.utils.DateUtils;
 import cn.com.ty.lift.common.utils.MapHelper;
 import cn.com.ty.lift.common.utils.ValuePool;
 import cn.com.ty.lift.common.verify.Val;
 import cn.com.ty.lift.common.verify.Validate;
+import cn.com.ty.lift.common.verify.ValidateException;
 import cn.com.xwy.boot.web.dto.RestResponse;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.IterUtil;
@@ -58,7 +60,6 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
 import org.springframework.web.bind.annotation.RequestBody;
 
-import javax.servlet.http.HttpServletResponse;
 import java.io.*;
 import java.math.BigDecimal;
 import java.net.HttpURLConnection;
@@ -197,8 +198,10 @@ public class MaintenanceRecordService extends ServiceImpl<MaintenanceRecordMappe
             if (Objects.nonNull(next))
                 iterator.remove();
         }
-        //获取当前时间后的维保计划列表,并清除计划
-        maintenancePlanService.removeByIds(planList.stream().map(MaintenancePlan::getId).collect(Collectors.toList()));
+        if (CollUtil.isNotEmpty(planList)) {
+            //获取当前时间后的维保计划列表,并清除计划
+            maintenancePlanService.removeByIds(planList.stream().map(MaintenancePlan::getId).collect(Collectors.toList()));
+        }
         //按照修改时间重新生成计划
         LocalDate beginTime = request.getCurrentTime().plusDays(interval);
         List<MaintenancePlan> plans = maintenancePlanService.generatePlan(plan, periods, interval, beginTime, endDate);
@@ -583,8 +586,12 @@ public class MaintenanceRecordService extends ServiceImpl<MaintenanceRecordMappe
         if (CollUtil.isNotEmpty(page.getRecords())) {
             List<MtRecordResponse> records = page.getRecords();
             for (MtRecordResponse mtRecord : records) {
-                String repairDuration = getRepairDuration(mtRecord.getRepairDiff());
-                mtRecord.setRepairDuration(repairDuration);
+                if (mtRecord.getRepairDiff() != null) {
+                    String repairDuration = getRepairDuration(mtRecord.getRepairDiff());
+                    mtRecord.setRepairDuration(repairDuration);
+                } else {
+                    mtRecord.setRepairDuration("");
+                }
             }
         }
         return page;
@@ -843,7 +850,7 @@ public class MaintenanceRecordService extends ServiceImpl<MaintenanceRecordMappe
         return baseMapper.pageByLift(request.getPage(), request);
     }
 
-    public void export(MtRecordRequest mtRecordRequest, HttpServletResponse response) {
+    public String export(MtRecordRequest mtRecordRequest) {
         Map<String, String> headerAlias = new LinkedHashMap<>();
         headerAlias.put("projectName", "项目名称");
         headerAlias.put("useCompanyCode", "梯号");
@@ -904,67 +911,56 @@ public class MaintenanceRecordService extends ServiceImpl<MaintenanceRecordMappe
                 //处理文件夹路径
                 String projectName = mtRecordResponse.getProjectName();
                 String registrationCode = mtRecordResponse.getRegistrationCode();
+                String useCompanyCode = mtRecordResponse.getUseCompanyCode();
                 projectName = StrUtil.isNotEmpty(projectName) ? projectName.replace(illegalChars, "-") : "[项目]";
                 registrationCode = StrUtil.isNotEmpty(registrationCode) ? registrationCode.replace(illegalChars, "-") : "[电梯注册代码]";
+                useCompanyCode = useCompanyCode != null ? useCompanyCode : "";
                 //保养单及图片文件夹 dir/i.ProjectName-RegistrationCode/
-//                String imgDir = StrUtil.format("{}{}{}.{}-{}{}", dir, File.separator, (i + 1), projectName, registrationCode, File.separator);
+                String imgDir = StrUtil.format("{}{}{}.{}-{}-", dir, File.separator, (i + 1), projectName, registrationCode);
+                imgDir += useCompanyCode + File.separator;
                 //生成维保图片
-//                List<MtRecordImg> mtRecordImgs = mtRecordResponse.getMtRecordImgs();
-//                List<MtRecordImg> imgs = mtRecordImgs.stream().filter(img -> mtRecordResponse.getId().equals(img.getMtRecordId())).collect(Collectors.toList());
-//                if (IterUtil.isNotEmpty(imgs)) {
-//                    for (int n = 0; n < imgs.size(); n++) {
-//                        String imgUrl = imgs.get(n).getImgUrl();
-//                        if (StrUtil.isNotEmpty(imgUrl)) {
-//                            log.info("imgUrl: {}", imgUrl);
-//                            String filename = imgDir + StrUtil.format("维保图片{}.jpg", (n + 1));
-//                            log.info("生成维保图片文件: {}", filename);
-//                            HttpUtil.downloadFile(imgUrl, filename);
-//                        }
-//                    }
-//                }
+                List<MtRecordImg> mtRecordImgs = mtRecordResponse.getMtRecordImgs();
+                List<MtRecordImg> imgs = mtRecordImgs.stream().filter(img -> mtRecordResponse.getId().equals(img.getMtRecordId())).collect(Collectors.toList());
+                if (IterUtil.isNotEmpty(imgs)) {
+                    for (int n = 0; n < imgs.size(); n++) {
+                        String imgUrl = imgs.get(n).getImgUrl();
+                        if (StrUtil.isNotEmpty(imgUrl)) {
+                            log.info("imgUrl: {}", imgUrl);
+                            String filename = imgDir + StrUtil.format("维保图片{}.jpg", (n + 1));
+                            log.info("生成维保图片文件: {}", filename);
+                            HttpUtil.downloadFile(imgUrl, filename);
+                        }
+                    }
+                }
                 //生成保养单
-                String maintenanceExcelDir = StrUtil.format("{}{}{}.{}-{}{}", dir, File.separator, (i + 1), projectName, registrationCode, "保养单.xlsx");
+                String maintenanceExcelDir = imgDir + "保养单.xlsx";
                 log.info("生成保养单: {}", maintenanceExcelDir);
                 excelWriter(mtRecordResponse, maintenanceExcelDir);
             }
             //压缩文件夹
             log.info("生成zipFile路径: {}", zip);
             ZipUtil.zip(dir, zip);
+            //上传文件到阿里云,并返回路径给前端
+            return AliyunOSS.me().putObject("maintenance/export/zip/" + generateCode + ".zip", readInputStream(new FileInputStream(new File(zip))));
         } catch (Exception e) {
-            FileUtil.del(zipFile);
-            FileUtil.del(baseDir);
             log.error("生成保养文件失败", e);
             throw Validate.validateException("生成保养文件失败");
-        }
-        //下载压缩文件
-        if (FileUtil.exist(zipFile)) {
-            // 设置强制下载不打开, ZIP的application/x-zip-compressed
-            response.setContentType("application/force-download");
-            // 设置文件名
-            response.addHeader("Content-Disposition", "attachment;fileName=" + zipFile.getName());
-            byte[] buffer = new byte[1024];
-            try (FileInputStream fis = new FileInputStream(zipFile);
-                 BufferedInputStream bis = new BufferedInputStream(fis)) {
-                OutputStream os = response.getOutputStream();
-                int i;
-                while ((i = bis.read(buffer)) != -1) {
-                    os.write(buffer, 0, i);
-                }
-            } catch (Exception e) {
-                log.error("下载保养文件失败", e);
-                throw Validate.validateException("下载保养文件失败");
-            } finally {
-                //删除临时根目录和zip文件
-                FileUtil.del(zipFile);
-                FileUtil.del(baseDir);
-            }
+        } finally {
+            FileUtil.del(zipFile);
+            FileUtil.del(baseDir);
         }
     }
 
     private MtRecordResponse getMtRecordResponse(@RequestBody @Val MtRecordRequest request) {
         MtRecordResponse entity = this.infoById(request);
-        String repairDuration = this.getRepairDuration(entity.getRepairDiff());
-        entity.setRepairDuration(repairDuration);
+        if (entity == null) {
+            throw new ValidateException("维保记录不存在");
+        }
+        if (entity.getRepairDiff() != null) {
+            String repairDuration = this.getRepairDuration(entity.getRepairDiff());
+            entity.setRepairDuration(repairDuration);
+        }
+        entity.setRepairDuration("");
         Validate.notNull(entity, ValuePool.MAINTENANCE_RECORD_NOT_EXIST);
         /**
          * 维保项id:0/1/2, 0:无需保养,1:已保养,2:需要更换
@@ -997,6 +993,9 @@ public class MaintenanceRecordService extends ServiceImpl<MaintenanceRecordMappe
         HSSFWorkbook wb = new HSSFWorkbook();
         ExcelWriter writer = new ExcelWriter(wb, "保养单");
 
+        String stopDate = mtRecordResponse.getStopDate() != null ? mtRecordResponse.getStopDate().toString().replace("T", " ") : "未设置";
+        String recoveryDate = mtRecordResponse.getRecoveryDate() != null ? mtRecordResponse.getRecoveryDate().toString().replace("T", " ") : "未设置";
+        String workDate = mtRecordResponse.getWorkDate() != null ? mtRecordResponse.getWorkDate().toString().replace("T", " ") : "未设置";
         writer.setColumnWidth(1, 25);
         writer.setColumnWidth(3, 25);
         writer.setColumnWidth(4, 25);
@@ -1006,36 +1005,52 @@ public class MaintenanceRecordService extends ServiceImpl<MaintenanceRecordMappe
         writer.merge(1, 1, 4, 5, "设备内部编号:" + (mtRecordResponse.getUseCompanyCode() != null ? mtRecordResponse.getUseCompanyCode() : "未设置"), false);
         writer.merge(2, 2, 0, 1, "注册代码:" + mtRecordResponse.getRegistrationCode(), false);
         writer.merge(2, 2, 2, 3, "电梯位置:" + mtRecordResponse.getDevicePosition(), false);
-        writer.merge(2, 2, 4, 5, "保养类型:" + mtRecordResponse.getType(), false);
-        writer.merge(3, 3, 0, 1, "保养时间:" + mtRecordResponse.getWorkDate().toString().replace("T", " "), false);
+        String type = "";
+        switch (mtRecordResponse.getType()) {
+            case 1:
+                type = "半月保";
+                break;
+            case 2:
+                type = "季度保";
+                break;
+            case 3:
+                type = "半年保";
+                break;
+            case 4:
+                type = "全年保";
+        }
+        writer.merge(2, 2, 4, 5, "保养类型:" + type, false);
+        writer.merge(3, 3, 0, 1, "保养时间:" + workDate, false);
         writer.merge(3, 3, 2, 3, "项目编号:" + mtRecordResponse.getProjectCode(), false);
         writer.merge(3, 3, 4, 5, "项目名称:" + mtRecordResponse.getProjectName(), false);
         writer.merge(4, 4, 0, 1, "计划保养时间:" + mtRecordResponse.getPlanDate(), false);
-        writer.merge(4, 4, 2, 3, "停梯时间:" + mtRecordResponse.getStopDate().toString().replace("T", " "), false);
-        writer.merge(4, 4, 4, 5, "恢梯时间:" + mtRecordResponse.getRecoveryDate().toString().replace("T", " "), false);
+        writer.merge(4, 4, 2, 3, "停梯时间:" + stopDate, false);
+        writer.merge(4, 4, 4, 5, "恢梯时间:" + recoveryDate, false);
         writer.writeCellValue(0, 5, "保养时长");
-        writer.merge(5, 5, 1, 5, mtRecordResponse.getRepairDuration(), false);
+        writer.merge(5, 5, 1, 5, mtRecordResponse.getRepairDuration() != null ? mtRecordResponse.getRepairDuration() : "", false);
         writer.writeCellValue(0, 6, "序号");
         writer.merge(6, 6, 1, 2, "维保项目", false);
         writer.merge(6, 6, 3, 4, "维保基本要求", false);
         writer.writeCellValue(5, 6, "结果");
         Collection<MaintenanceOption> mtOptions = mtRecordResponse.getMtOptions();
         int i = 0;
-        for (MaintenanceOption mtOption : mtOptions) {
-            i++;
-            writer.writeCellValue(0, 6 + i, i);
-            writer.merge(6 + i, 6 + i, 1, 2, mtOption.getItem(), false);
-            writer.merge(6 + i, 6 + i, 3, 4, mtOption.getContent(), false);
-            String maintenance = "√";
-            switch (mtOption.getOpt()) {
-                case 0:
-                    maintenance = "/";
-                    break;
-                case 2:
-                    maintenance = "X";
-                    break;
+        if (mtOptions != null) {
+            for (MaintenanceOption mtOption : mtOptions) {
+                i++;
+                writer.writeCellValue(0, 6 + i, i);
+                writer.merge(6 + i, 6 + i, 1, 2, mtOption.getItem(), false);
+                writer.merge(6 + i, 6 + i, 3, 4, mtOption.getContent(), false);
+                String maintenance = "√";
+                switch (mtOption.getOpt()) {
+                    case 0:
+                        maintenance = "/";
+                        break;
+                    case 2:
+                        maintenance = "X";
+                        break;
+                }
+                writer.writeCellValue(5, 6 + i, maintenance);
             }
-            writer.writeCellValue(5, 6 + i, maintenance);
         }
         writer.writeCellValue(0, 7 + i, "保养建议");
         writer.merge(7 + i, 7 + i, 1, 2, mtRecordResponse.getMaintenanceAdvice() != null ? mtRecordResponse.getMaintenanceAdvice() : "", false);

+ 6 - 1
lift-business-service/src/main/resources/mapper/project/ProjectMapper.xml

@@ -164,9 +164,14 @@
 		p.project_code  AS projectCode,
 		p.project_name  AS projectName,
 		p.project_usage AS projectUsage,
-		p.actual_num    AS actualNum,
+		ifnull(t.actualNum, 0) actualNum,
 		p.project_status AS projectStatus
 		FROM project p
+		LEFT JOIN (SELECT count(1) actualNum, project_id, mt_company_id
+					FROM project_lift_relevance plr
+					WHERE plr.delete_flag = '0'
+					GROUP BY project_id) t
+		ON t.project_id = p.id AND t.mt_company_id = p.mt_company_id
 		<if test="request.currentRoleCode == 'REGION_DIRECTOR' or request.currentRoleCode == 'ROLEMTWORK' or request.currentRoleCode == 'CLERK' ">
 			LEFT JOIN project_user pu ON p.id = pu.project_id
 		</if>

+ 7 - 43
lift-enterprise-service/src/main/java/cn/com/ty/lift/enterprise/oa/controller/AttendanceController.java

@@ -32,10 +32,7 @@ import javax.validation.Valid;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
 
 /**
  * <p>
@@ -51,23 +48,10 @@ import java.util.Objects;
 @RequestMapping("/oa/attendance")
 public class AttendanceController {
 
-    private AttendanceService         attendanceService;
-    private AttendanceImgService      attendanceImgService;
+    private AttendanceService attendanceService;
+    private AttendanceImgService attendanceImgService;
     private MaintenanceCompanyService maintenanceCompanyService;
 
-    private static final Map<String, String> headerAlias = new HashMap<>();
-
-    static {
-        headerAlias.put("username", "姓名");
-        headerAlias.put("typeDesc", "打卡类型");
-        headerAlias.put("clockDate", "日期");
-        headerAlias.put("requiredTime", "应打卡时间");
-        headerAlias.put("clockTime", "打卡时间");
-        headerAlias.put("address", "地点");
-        headerAlias.put("remarks", "备注");
-        headerAlias.put("statusDesc", "是否迟到/早退");
-    }
-
     /**
      * 根据id查找
      *
@@ -96,7 +80,7 @@ public class AttendanceController {
         //签到管理: 按日期和打卡时间由近及远排序
         LocalDate begin = request.getBegin();
         LocalDate end = request.getEnd();
-        if(Objects.nonNull(begin) && Objects.nonNull(end)){
+        if (Objects.nonNull(begin) && Objects.nonNull(end)) {
             Validate.isTrue(begin.isBefore(end), ValuePool.beginTimeToEndTimeIllegal(begin, end));
         }
         request.addDesc("create_date");
@@ -193,7 +177,7 @@ public class AttendanceController {
         Integer type = entity.getType();
         //先统计当天是否有对应的打卡记录
         Attendance same = attendanceService.sameByUserAndType(mtCompanyId, userId, type);
-        if(Objects.nonNull(same)){
+        if (Objects.nonNull(same)) {
             LocalDateTime createDate = same.getCreateDate();
             String message = Objects.isNull(createDate) ? "" : String.format("(打卡时间:%tF %tT)", createDate, createDate);
             return RestResponse.fail(ValuePool.ATTEND_HAD_CLOCK + message);
@@ -281,27 +265,7 @@ public class AttendanceController {
     }
 
     @PostMapping("export")
-    public void export(@Val @RequestBody AttendanceRequest request, HttpServletResponse response) {
-        log.info("headerAlias: {}", headerAlias);
-        List<AttendanceResponse> attendances = attendanceService.listByIdList(request);
-        Validate.notNull(attendances, ValuePool.ATTEND_MISSING);
-        try {
-            ExcelWriter writer = ExcelUtil.getWriter();
-            //设置列别名
-            headerAlias.forEach(writer::addHeaderAlias);
-            //只导出配置了别名的列属性
-            writer.setOnlyAlias(true);
-            writer.write(attendances, true);
-            writer.autoSizeColumnAll();
-            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
-            response.setHeader("Content-Disposition", "attachment;filename=" + IdWorker.getIdStr() + ".xlsx");
-            ServletOutputStream out = response.getOutputStream();
-            writer.flush(out, true);
-            writer.close();
-            IoUtil.close(out);
-        } catch (Exception e) {
-            log.error("导出打卡记录异常", e);
-            throw Validate.validateException("导出打卡记录异常");
-        }
+    public void export(@RequestBody AttendanceRequest attendanceRequest, HttpServletResponse response) {
+        attendanceService.export(attendanceRequest, response);
     }
 }

+ 2 - 2
lift-enterprise-service/src/main/java/cn/com/ty/lift/enterprise/oa/dto/AttendanceRequest.java

@@ -111,9 +111,9 @@ public class AttendanceRequest extends PageRequest {
     private Long userId;
 
     /**
-     * 导出记录的id列表
+     * 导出记录的用户id列表
      */
-    private List<Long> ids;
+    private List<Long> userIds;
 
     private String attendanceYearMonth;
 }

+ 9 - 0
lift-enterprise-service/src/main/java/cn/com/ty/lift/enterprise/oa/dto/AttendanceResponse.java

@@ -27,6 +27,11 @@ public class AttendanceResponse extends Attendance{
      */
     private String username;
 
+    /**
+     * 用户手机号
+     */
+    private String userMobile;
+
     /**
      * 签到图片
      */
@@ -77,6 +82,7 @@ public class AttendanceResponse extends Attendance{
         LocalTime localTime;
         int type = ValuePool.nullable(this.getType(), 0);
         switch (type) {
+            case 1:
             case 11:
                 localTime = this.getTopTime();
                 break;
@@ -86,6 +92,7 @@ public class AttendanceResponse extends Attendance{
             case 21:
                 localTime =  this.getTopTimePm();
                 break;
+            case 2:
             case 22:
                 localTime =  this.getDownTimePm();
                 break;
@@ -148,6 +155,8 @@ public class AttendanceResponse extends Attendance{
                 }else {
                     return "--";
                 }
+            case 2:
+                return "早退";
             default:
                 return "--";
         }

+ 4 - 0
lift-enterprise-service/src/main/java/cn/com/ty/lift/enterprise/oa/mapper/AttendanceMapper.java

@@ -7,6 +7,7 @@ import cn.com.ty.lift.enterprise.oa.entity.Attendance;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
 
 import java.util.List;
 
@@ -23,4 +24,7 @@ public interface AttendanceMapper extends BaseMapper<Attendance>{
 	AttendanceResponse infoById(@Param("cond")AttendanceRequest request);
 
 	List<AttendanceResponse> listByIdList(@Param("cond")AttendanceRequest request);
+
+	@Select("select user_id from mt_company_user where mt_company_id = #{mtCompanyId}")
+	List<Long> selectCompanyUserIdsByMtCompanyId(Long mtCompanyId);
 }

+ 119 - 6
lift-enterprise-service/src/main/java/cn/com/ty/lift/enterprise/oa/service/AttendanceService.java

@@ -1,18 +1,33 @@
 package cn.com.ty.lift.enterprise.oa.service;
 
+import cn.com.ty.lift.common.utils.ValuePool;
+import cn.com.ty.lift.common.verify.Validate;
 import cn.com.ty.lift.enterprise.oa.dto.AttendanceRequest;
 import cn.com.ty.lift.enterprise.oa.dto.AttendanceResponse;
 import cn.com.ty.lift.enterprise.oa.entity.Attendance;
+import cn.com.ty.lift.enterprise.oa.entity.MaintenanceCompany;
 import cn.com.ty.lift.enterprise.oa.mapper.AttendanceMapper;
+import cn.hutool.core.io.IoUtil;
+import cn.hutool.poi.excel.ExcelUtil;
+import cn.hutool.poi.excel.ExcelWriter;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+import java.io.FileNotFoundException;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
-import java.util.List;
+import java.util.*;
 
 /**
  * <p>
@@ -23,10 +38,14 @@ import java.util.List;
  * @since 2019-12-12
  */
 @Service
-public class AttendanceService extends ServiceImpl<AttendanceMapper,Attendance> {
+@Slf4j
+public class AttendanceService extends ServiceImpl<AttendanceMapper, Attendance> {
+    @Resource
+    MaintenanceCompanyService maintenanceCompanyService;
 
     /**
      * 根据条件分页查找签到记录
+     *
      * @param request AttendanceRequest
      * @return IPage<AttendanceResponse>
      */
@@ -36,6 +55,7 @@ public class AttendanceService extends ServiceImpl<AttendanceMapper,Attendance>
 
     /**
      * 根据用户分页查找记录
+     *
      * @param request AttendanceRequest
      * @return IPage<AttendanceResponse>
      */
@@ -49,9 +69,10 @@ public class AttendanceService extends ServiceImpl<AttendanceMapper,Attendance>
 
     /**
      * 根据用户和打卡类型统计打卡记录条数
+     *
      * @param mtCompanyId 维保公司id
-     * @param userId 用户id
-     * @param type 打卡类型
+     * @param userId      用户id
+     * @param type        打卡类型
      * @return int
      */
     public Attendance sameByUserAndType(Long mtCompanyId, Long userId, Integer type) {
@@ -68,16 +89,108 @@ public class AttendanceService extends ServiceImpl<AttendanceMapper,Attendance>
 
     /**
      * 根据id查询,带关联信息
+     *
      * @param request
      * @return
      */
-    public AttendanceResponse infoById(AttendanceRequest request){
+    public AttendanceResponse infoById(AttendanceRequest request) {
         return baseMapper.infoById(request);
     }
 
-    public long countByMtCompany(Long mtCompanyId){
+    public long countByMtCompany(Long mtCompanyId) {
         LambdaQueryWrapper<Attendance> lambdaQueryWrapper = Wrappers.lambdaQuery();
         lambdaQueryWrapper.eq(Attendance::getMtCompanyId, mtCompanyId);
         return count(lambdaQueryWrapper);
     }
+
+    public void export(AttendanceRequest attendanceRequest, HttpServletResponse response) {
+        if (attendanceRequest.getUserIds()==null||attendanceRequest.getUserIds().isEmpty()) {
+            attendanceRequest.setUserIds(this.baseMapper.selectCompanyUserIdsByMtCompanyId(attendanceRequest.getMtCompanyId()));
+        }
+        attendanceRequest.setUserId(null);
+        List<AttendanceResponse> attendanceResponses = this.listByIdList(attendanceRequest);
+        Validate.notNull(attendanceResponses, ValuePool.ATTEND_MISSING);
+        ExcelWriter writer = ExcelUtil.getWriter(true);
+        HashMap<String, String> attendances = new HashMap<>();
+        Set<String> userIds = new HashSet<>();
+        for (AttendanceResponse attendance : attendanceResponses) {
+            int type = ValuePool.nullable(attendance.getType(), 0);
+            Long userId = attendance.getUserId();
+            int dayOfMonth = attendance.getCreateDate().getDayOfMonth();
+            String attendanceTime = String.format("%tT", attendance.getCreateDate()) + " " + attendance.getStatusDesc();
+            switch (type) {
+                case 1:
+                case 11:
+                    attendances.put(userId + "topTime" + dayOfMonth, attendanceTime);
+                    break;
+                case 12:
+                    attendances.put(userId + "downTime" + dayOfMonth, attendanceTime);
+                    break;
+                case 21:
+                    attendances.put(userId + "topTimePm" + dayOfMonth, attendanceTime);
+                    break;
+                case 2:
+                case 22:
+                    attendances.put(userId + "downTimePm" + dayOfMonth, attendanceTime);
+                    break;
+                case 31:
+                    attendances.put(userId + "topTimeOt" + dayOfMonth, attendanceTime);
+                    break;
+                case 32:
+                    attendances.put(userId + "downTimeOt" + dayOfMonth, attendanceTime);
+                    break;
+            }
+            attendances.put(userId.toString(), attendance.getUsername() + "   " + attendance.getUserMobile());
+            userIds.add(userId.toString());
+        }
+        MaintenanceCompany attendanceTime = maintenanceCompanyService.getById(attendanceRequest.getMtCompanyId());
+        String[] split = attendanceRequest.getAttendanceYearMonth().trim().split("-");
+        log.info("用户数量" + userIds.size());
+        try {
+            writeExcel(Integer.parseInt(split[0]), Integer.parseInt(split[1]), writer, attendances, userIds, attendanceTime);
+            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
+            response.setHeader("Content-Disposition", "attachment;filename=" + IdWorker.getIdStr() + ".xlsx");
+            ServletOutputStream out = response.getOutputStream();
+            writer.flush(out, true);
+            writer.close();
+            IoUtil.close(out);
+        } catch (Exception e) {
+            log.error("导出打卡记录异常", e);
+            throw Validate.validateException("导出打卡记录异常");
+        }
+    }
+
+    private void writeExcel(int year, int month, ExcelWriter writer, Map<String, String> attendances, Set<String> userIds, MaintenanceCompany attendanceTime) throws FileNotFoundException {
+        int lengthOfMonth = LocalDate.of(year, month, 1).lengthOfMonth();
+        writer.merge(0, 0, 0, lengthOfMonth, year + "年" + month + "月签到记录表", false);
+        writer.setColumnWidth(0, 20);
+        Iterator<String> iterator = userIds.iterator();
+        int i = 0;
+        while (iterator.hasNext()) {
+            String userId = iterator.next();
+            int col = i * 9;
+            int j = 1;
+            for (; j <= lengthOfMonth; j++) {
+                writer.setColumnWidth(j, 15);
+                writer.writeCellValue(j, col + 1, j);
+                //写入每个用户每天的打卡信息
+                writer.writeCellValue(j, col + 3, Optional.ofNullable(attendances.get(userId + "topTime" + j)).orElse(""));
+                writer.writeCellValue(j, col + 4, Optional.ofNullable(attendances.get(userId + "downTime" + j)).orElse(""));
+                writer.writeCellValue(j, col + 5, Optional.ofNullable(attendances.get(userId + "topTimePm" + j)).orElse(""));
+                writer.writeCellValue(j, col + 6, Optional.ofNullable(attendances.get(userId + "downTimePm" + j)).orElse(""));
+                writer.writeCellValue(j, col + 7, Optional.ofNullable(attendances.get(userId + "topTimeOt" + j)).orElse(""));
+                writer.writeCellValue(j, col + 8, Optional.ofNullable(attendances.get(userId + "downTimeOt" + j)).orElse(""));
+            }
+            //写入公司的打卡时间
+            writer.merge(col + 1, col + 2, 0, 0, "应打卡时间", false);
+            writer.writeCellValue(0, col + 3, "上午上班时间" + (attendanceTime.getTopTime() != null ? attendanceTime.getTopTime().toString() : "未设置"));
+            writer.writeCellValue(0, col + 4, "上午下班时间" + (attendanceTime.getDownTime() != null ? attendanceTime.getDownTime().toString() : "未设置"));
+            writer.writeCellValue(0, col + 5, "下午上班时间" + (attendanceTime.getTopTimePm() != null ? attendanceTime.getTopTimePm().toString() : "未设置"));
+            writer.writeCellValue(0, col + 6, "下午下班时间" + (attendanceTime.getDownTimePm() != null ? attendanceTime.getDownTimePm().toString() : "未设置"));
+            writer.writeCellValue(0, col + 7, "加班上班时间" + (attendanceTime.getTopTimeOt() != null ? attendanceTime.getTopTimeOt().toString() : "未设置"));
+            writer.writeCellValue(0, col + 8, "加班下班时间" + (attendanceTime.getDownTimeOt() != null ? attendanceTime.getDownTimeOt().toString() : "未设置"));
+            writer.merge(col + 2, col + 2, 1, j - 1, attendances.get(userId), false);
+            i++;
+        }
+    }
 }

+ 8 - 7
lift-enterprise-service/src/main/resources/mapper/oa/AttendanceMapper.xml

@@ -66,17 +66,18 @@
             mt.down_time_pm,
             mt.top_time_ot,
             mt.down_time_ot,
-            ui.name AS username
+            ui.name AS username,
+            ui.mobile AS userMobile
         FROM attendance att
         LEFT JOIN user_info ui ON att.user_id = ui.user_id
         LEFT JOIN maintenance_company mt ON att.mt_company_id = mt.id
         <where>
-            <if test="cond.ids != null and cond.ids.size > 0">
-                AND att.id IN
-                <foreach collection="cond.ids" item="id" open="(" separator="," close=")">
-                    #{id}
-                </foreach>
-            </if>
+			<if test="cond.userIds != null and cond.userIds.size > 0">
+				AND att.user_id IN
+				<foreach collection="cond.userIds" item="uId" open="(" separator="," close=")">
+					#{uId}
+				</foreach>
+			</if>
             <if test="cond.userId != null and cond.userId != ''">
                 AND att.user_id = #{cond.userId}
             </if>

+ 20 - 16
lift-system-service/src/main/java/cn/com/ty/lift/system/user/service/impl/UserApplicationService.java

@@ -83,29 +83,33 @@ public class UserApplicationService extends ServiceImpl<UserApplicationMapper, U
         //申请人id
         long applyUserId = userApplyRequest.getUserId();
         //获取用户原有的申请信息
-        UserApplication userApplication = this.getOne(new QueryWrapper<UserApplication>()
+        List<UserApplication> userApplications = this.list(new QueryWrapper<UserApplication>()
                 .eq("mt_company_id", companyId)
                 .eq("user_id", applyUserId)
                 //去掉申请未通过的判断
                 .ne("status", ApiConstants.ApplicationConstants.APPLY_FAIL)
+                .orderByDesc("apply_date")
         );
-        //设置前校验
-        RestResponse restResponse = applyCheck(userApplyRequest, userApplication, applyTypeTeam);
-        if (restResponse != null) {
-            //校验不通过返回校验信息
-            return restResponse;
+        if (!userApplications.isEmpty()) {
+            RestResponse restResponse = applyCheck(userApplyRequest, userApplications.get(0), applyTypeTeam);
+            if (restResponse != null) {
+                //校验不通过返回校验信息
+                return restResponse;
+            }
         }
+        //设置前校验
+
         //校验通过设置审核信息
-        if (userApplication == null) {
-            userApplication = new UserApplication();
-            userApplication.setUserId(applyUserId);
-            userApplication.setMtCompanyId(companyId);
-            userApplication.setType(applyTypeTeam);
-            //设置审核描述信息
-            userApplication.setDescription(userApplyRequest.getDescription());
-            //申请加入项目时需要设置的信息
-            userApplication.setProjectId(userApplyRequest.getProjectId());
-        }
+
+        UserApplication userApplication = new UserApplication();
+        userApplication.setUserId(applyUserId);
+        userApplication.setMtCompanyId(companyId);
+        userApplication.setType(applyTypeTeam);
+        //设置审核描述信息
+        userApplication.setDescription(userApplyRequest.getDescription());
+        //申请加入项目时需要设置的信息
+        userApplication.setProjectId(userApplyRequest.getProjectId());
+
         //审核状态变为待审核
         userApplication.setStatus(ApiConstants.ApplicationConstants.APPLY_WAIT);
         //申请加入项目时需要设置的信息