Bladeren bron

项目下达,采购审批模块

lichaoliu 4 jaren geleden
bovenliggende
commit
0a5c5bf5a8
29 gewijzigde bestanden met toevoegingen van 1159 en 303 verwijderingen
  1. 2 0
      src/main/java/com/migao/config/constant/ProjectStatus.java
  2. 3 2
      src/main/java/com/migao/config/response/PageBean.java
  3. 1 1
      src/main/java/com/migao/config/response/ResponseBean.java
  4. 16 16
      src/main/java/com/migao/config/response/ResponseBuilder.java
  5. 1 1
      src/main/java/com/migao/config/response/ResponseEnum.java
  6. 73 0
      src/main/java/com/migao/controller/MilestoneController.java
  7. 106 0
      src/main/java/com/migao/controller/ProjectControlController.java
  8. 52 10
      src/main/java/com/migao/controller/ProjectStoreController.java
  9. 38 0
      src/main/java/com/migao/controller/PurchasingApprovalController.java
  10. 37 0
      src/main/java/com/migao/entity/vo/req/MilestoneInsertReq.java
  11. 37 0
      src/main/java/com/migao/entity/vo/req/MilestonePageQueryReq.java
  12. 40 0
      src/main/java/com/migao/entity/vo/req/MilestoneQueryReq.java
  13. 52 0
      src/main/java/com/migao/entity/vo/req/MilestoneUpdateReq.java
  14. 2 5
      src/main/java/com/migao/entity/vo/req/ProjectInsertReq.java
  15. 33 22
      src/main/java/com/migao/entity/vo/req/ProjectUpdateReq.java
  16. 47 0
      src/main/java/com/migao/entity/vo/req/PurchasingApprovalInsertReq.java
  17. 33 0
      src/main/java/com/migao/entity/vo/req/PurchasingApprovalPageQueryReq.java
  18. 36 0
      src/main/java/com/migao/entity/vo/req/PurchasingApprovalQueryReq.java
  19. 47 0
      src/main/java/com/migao/entity/vo/req/PurchasingApprovalUpdateReq.java
  20. 79 0
      src/main/java/com/migao/entity/vo/req/SubProjectInsertReq.java
  21. 40 0
      src/main/java/com/migao/entity/vo/res/MilestoneQueryRes.java
  22. 36 0
      src/main/java/com/migao/entity/vo/res/PurchasingApprovalQueryRes.java
  23. 9 0
      src/main/java/com/migao/mapper/MilestoneRepository.java
  24. 18 1
      src/main/java/com/migao/service/MilestoneService.java
  25. 15 4
      src/main/java/com/migao/service/ProjectService.java
  26. 6 1
      src/main/java/com/migao/service/PurchasingApprovalService.java
  27. 129 7
      src/main/java/com/migao/service/impl/MilestoneServiceImpl.java
  28. 163 233
      src/main/java/com/migao/service/impl/ProjectServiceImpl.java
  29. 8 0
      src/main/java/com/migao/service/impl/PurchasingApprovalServiceImpl.java

+ 2 - 0
src/main/java/com/migao/config/constant/ProjectStatus.java

@@ -3,6 +3,8 @@ package com.migao.config.constant;
 public enum ProjectStatus {
     TO_BE_REPORTED("待提报"),
     TO_APPROVAL("待审批"),
+    APPROVE("审批通过"),
+    REJECT("审批拒绝"),
     HAS_ORDERED("已采购"),
     HAVE_MONEY("已打款"),
     RESERVES_ISSUED("储备下达"),

+ 3 - 2
src/main/java/com/migao/config/response/PageBean.java

@@ -19,10 +19,11 @@ import java.util.List;
 @Builder
 public class PageBean<T> {
 
-    private Integer page;
+    private Long page;
+
+    private List<Integer> pages;
 
     private Long total;
 
     private List<T> row;
-
 }

+ 1 - 1
src/main/java/com/migao/config/response/ResponseBean.java

@@ -13,7 +13,7 @@ public class ResponseBean<T> {
 
     private Integer status;
 
-    private String massage;
+    private String message;
 
     private T data;
 

+ 16 - 16
src/main/java/com/migao/config/response/ResponseBuilder.java

@@ -1,7 +1,7 @@
 package com.migao.config.response;
 
 
-import org.springframework.data.domain.Page;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 
 import java.util.List;
 import java.util.function.Function;
@@ -24,7 +24,7 @@ public class ResponseBuilder<T> {
      * @return
      */
     public static <T> ResponseBean<T> ok() {
-        return ResponseBean.<T>builder().status(ResponseEnum.OK.status).massage(ResponseEnum.OK.message).build();
+        return ResponseBean.<T>builder().status(ResponseEnum.OK.status).message(ResponseEnum.OK.message).build();
     }
 
     /**
@@ -34,8 +34,8 @@ public class ResponseBuilder<T> {
      * @param
      * @return
      */
-    public static <T> ResponseBean<T> ok(Integer status, String massage) {
-        return ResponseBean.<T>builder().status(status).massage(massage).build();
+    public static <T> ResponseBean<T> ok(Integer status, String message) {
+        return ResponseBean.<T>builder().status(status).message(message).build();
     }
 
     /**
@@ -46,7 +46,7 @@ public class ResponseBuilder<T> {
      * @return
      */
     public static <T> ResponseBean<T> ok(T data) {
-        return ResponseBean.<T>builder().status(ResponseEnum.OK.status).massage(ResponseEnum.OK.message).data(data).build();
+        return ResponseBean.<T>builder().status(ResponseEnum.OK.status).message(ResponseEnum.OK.message).data(data).build();
     }
 
     /**
@@ -57,7 +57,7 @@ public class ResponseBuilder<T> {
      * @return
      */
     public static <T> ResponseBean<T> ok(T data, String message) {
-        return ResponseBean.<T>builder().status(ResponseEnum.OK.status).massage(message).data(data).build();
+        return ResponseBean.<T>builder().status(ResponseEnum.OK.status).message(message).data(data).build();
     }
 
 
@@ -70,7 +70,7 @@ public class ResponseBuilder<T> {
      * @return
      */
     public static <T, R> ResponseBean<List<R>> ok(List<T> dataList, Function<? super T, ? extends R> function) {
-        return ResponseBean.<List<R>>builder().data(buildBean(dataList, function)).status(ResponseEnum.OK.status).massage(ResponseEnum.OK.message).build();
+        return ResponseBean.<List<R>>builder().data(buildBean(dataList, function)).status(ResponseEnum.OK.status).message(ResponseEnum.OK.message).build();
     }
 
     /**
@@ -83,7 +83,7 @@ public class ResponseBuilder<T> {
      * @return
      */
     public static <T, R> ResponseBean<PageBean<R>> ok(Page<T> page, Function<? super T, ? extends R> function) {
-        return ResponseBean.<PageBean<R>>builder().data(buildPageBean(page, function)).status(ResponseEnum.OK.status).massage(ResponseEnum.OK.message).build();
+        return ResponseBean.<PageBean<R>>builder().data(buildPageBean(page, function)).status(ResponseEnum.OK.status).message(ResponseEnum.OK.message).build();
     }
 
 
@@ -112,10 +112,10 @@ public class ResponseBuilder<T> {
         return PageBean
                 .<R>builder()
                 .row(
-                        page.getContent().stream().map(function).collect(Collectors.toList())
+                        page.getRecords().stream().map(function).collect(Collectors.toList())
                 )
-                .total(page.getTotalElements())
-                .page(page.getTotalPages())
+                .total(page.getTotal())
+                .page(page.getPages())
                 .build();
     }
 
@@ -125,21 +125,21 @@ public class ResponseBuilder<T> {
      * @return
      */
     public static <T> ResponseBean<T> fail() {
-        return ResponseBean.<T>builder().status(ResponseEnum.FAIL.status).massage(ResponseEnum.FAIL.message).build();
+        return ResponseBean.<T>builder().status(ResponseEnum.FAIL.status).message(ResponseEnum.FAIL.message).build();
     }
 
     /**
      * 失败
      */
     public static <T> ResponseBean<T> fail(Integer status, String message) {
-        return ResponseBean.<T>builder().status(status).massage(message).build();
+        return ResponseBean.<T>builder().status(status).message(message).build();
     }
 
     /**
      * 失败
      */
     public static <T> ResponseBean<T> fail(String message) {
-        return ResponseBean.<T>builder().status(ResponseEnum.FAIL.status).massage(message).build();
+        return ResponseBean.<T>builder().status(ResponseEnum.FAIL.status).message(message).build();
     }
 
     /**
@@ -148,11 +148,11 @@ public class ResponseBuilder<T> {
      * @return
      */
     public static <T> ResponseBean<T> fail(T data) {
-        return ResponseBean.<T>builder().status(ResponseEnum.FAIL.status).massage(ResponseEnum.FAIL.message).data(data).build();
+        return ResponseBean.<T>builder().status(ResponseEnum.FAIL.status).message(ResponseEnum.FAIL.message).data(data).build();
     }
 
     public static <T> ResponseBean<T> fail(ResponseEnum responseEnum) {
-        return ResponseBean.<T>builder().status(responseEnum.status).massage(responseEnum.message).build();
+        return ResponseBean.<T>builder().status(responseEnum.status).message(responseEnum.message).build();
     }
 
 }

+ 1 - 1
src/main/java/com/migao/config/response/ResponseEnum.java

@@ -7,7 +7,7 @@ public enum ResponseEnum {
      */
     OK(10000,"成功"),
     UNAUTHORIZED(30001,"未认证"),
-    FORBIDDEN(30002,"未认证"),
+    FORBIDDEN(30002,"未授权"),
     NOTFOUND(40000,"未找到资源"),
     FAIL(50000,"失败");
 

+ 73 - 0
src/main/java/com/migao/controller/MilestoneController.java

@@ -0,0 +1,73 @@
+package com.migao.controller;
+
+
+import com.migao.config.response.PageBean;
+import com.migao.config.response.ResponseBean;
+import com.migao.config.validation.Insert;
+import com.migao.config.validation.Update;
+import com.migao.entity.vo.req.MilestoneInsertReq;
+import com.migao.entity.vo.req.MilestonePageQueryReq;
+import com.migao.entity.vo.req.MilestoneQueryReq;
+import com.migao.entity.vo.req.MilestoneUpdateReq;
+import com.migao.entity.vo.res.MilestoneQueryRes;
+import com.migao.service.MilestoneService;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import javax.annotation.Resource;
+import java.util.List;
+
+@Api(tags = "004.里程碑")
+@RestController
+@RequestMapping("/permission")
+public class MilestoneController {
+
+    @Resource
+    private MilestoneService milestoneService;
+
+    @ApiOperation("增")
+    @PostMapping(value = "/insert")
+    public ResponseBean<?> insert(
+            @Validated(value = {Insert.class}) @RequestBody MilestoneInsertReq milestoneInsertReq
+    ) {
+        return milestoneService.insert(milestoneInsertReq);
+    }
+
+
+    @ApiOperation("删")
+    @PostMapping(value = "/deleteById")
+    public ResponseBean<?> deleteById(
+            @RequestParam Integer id
+    ) {
+        return milestoneService.deleteById(id);
+    }
+
+
+    @ApiOperation("删")
+    @PostMapping(value = "/deleteBatch")
+    public ResponseBean<?> deleteBatch(
+            @RequestBody List<Integer> ids
+    ) {
+        return milestoneService.deleteBatch(ids);
+    }
+
+
+    @ApiOperation("改")
+    @PostMapping(value = "/update")
+    public ResponseBean<?> update(
+            @Validated(value = {Update.class}) @RequestBody MilestoneUpdateReq milestoneUpdateReq
+    ) {
+        return milestoneService.update(milestoneUpdateReq);
+    }
+
+
+    @ApiOperation("分页查")
+    @PostMapping(value = "/pageQuery")
+    public ResponseBean<PageBean<MilestoneQueryRes>> pageQuery(
+            @RequestBody MilestonePageQueryReq milestonePageQueryReq
+    ) {
+        return milestoneService.pageQuery(milestonePageQueryReq);
+    }
+}

+ 106 - 0
src/main/java/com/migao/controller/ProjectControlController.java

@@ -0,0 +1,106 @@
+package com.migao.controller;
+
+
+import com.migao.config.response.PageBean;
+import com.migao.config.response.ResponseBean;
+import com.migao.config.validation.Insert;
+import com.migao.config.validation.Update;
+import com.migao.entity.vo.req.ProjectInsertReq;
+import com.migao.entity.vo.req.ProjectPageQueryReq;
+import com.migao.entity.vo.req.ProjectUpdateReq;
+import com.migao.entity.vo.req.SubProjectInsertReq;
+import com.migao.entity.vo.res.DictionaryListRes;
+import com.migao.entity.vo.res.ProjectQueryRes;
+import com.migao.service.ProjectService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiOperationSupport;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@Api(tags = "004.储备下达")
+@RestController
+@RequestMapping("/project/give")
+public class ProjectControlController {
+
+    @Resource
+    private ProjectService projectService;
+
+    @ApiOperationSupport(order = 1)
+    @ApiOperation("分页查")
+    @PostMapping(value = "/pageQuery")
+    public ResponseBean<PageBean<ProjectQueryRes>> pageQueryControl(
+            @RequestBody ProjectPageQueryReq projectPageQueryReq
+    ) {
+        return projectService.pageQueryControl(projectPageQueryReq);
+    }
+
+    @ApiOperationSupport(order = 2)
+    @ApiOperation("新增子项目")
+    @PostMapping(value = "/insert")
+    public ResponseBean<?> insertSubProject(
+            @Validated(value = {Insert.class}) @RequestBody SubProjectInsertReq subProjectInsertReq
+    ) {
+        return projectService.insertSubProject(subProjectInsertReq);
+    }
+
+    @ApiOperation("项目分类下拉列表")
+    @PostMapping(value = "/projectClassify")
+    public ResponseBean<List<DictionaryListRes>> projectClassify() {
+        return projectService.projectClassify();
+    }
+
+    @ApiOperation("项目专业分类下拉列表")
+    @PostMapping(value = "/specialtyClassify")
+    public ResponseBean<List<DictionaryListRes>> specialtyClassify() {
+        return projectService.specialtyClassify();
+    }
+
+    @ApiOperation("二级分类下拉列表")
+    @PostMapping(value = "/twoClassify")
+    public ResponseBean<List<DictionaryListRes>> twoClassify() {
+        return projectService.twoClassify();
+    }
+
+    @ApiOperationSupport(order = 6)
+    @ApiOperation("删")
+    @PostMapping(value = "/deleteById")
+    public ResponseBean<?> deleteById(
+            @RequestParam Integer id
+    ) {
+        return projectService.deleteById(id);
+    }
+
+
+    @ApiOperationSupport(order = 5)
+    @ApiOperation("改")
+    @PostMapping(value = "/update")
+    public ResponseBean<?> update(
+            @Validated(value = {Update.class}) @RequestBody ProjectUpdateReq projectUpdateReq
+    ) {
+        return projectService.update(projectUpdateReq);
+    }
+
+    @ApiOperationSupport(order = 7)
+    @ApiOperation("根据地查询详情")
+    @PostMapping(value = "/findById")
+    public ResponseBean<ProjectQueryRes> findById(
+            @RequestParam Integer id
+    ) {
+        return projectService.findById(id);
+    }
+
+
+    @ApiOperationSupport(order = 9)
+    @ApiOperation("导出")
+    @PostMapping(value = "/export")
+    public ResponseBean<?> export(
+            @RequestBody ProjectPageQueryReq projectPageQueryReq
+    ) {
+        return projectService.export(projectPageQueryReq);
+    }
+
+}

+ 52 - 10
src/main/java/com/migao/controller/ProjectController.java → src/main/java/com/migao/controller/ProjectStoreController.java

@@ -15,18 +15,19 @@ import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiOperationSupport;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
+
 import javax.annotation.Resource;
 import java.util.List;
 
-@Api(tags = "003.項目模快")
+@Api(tags = "003.項目储备")
 @RestController
-@RequestMapping("/project")
-public class ProjectController {
+@RequestMapping("/project/store")
+public class ProjectStoreController {
 
     @Resource
     private ProjectService projectService;
 
-    @ApiOperationSupport(order = 1)
+    @ApiOperationSupport(order = 2)
     @ApiOperation("新增储备")
     @PostMapping(value = "/insert")
     public ResponseBean<?> insert(
@@ -40,17 +41,20 @@ public class ProjectController {
     public ResponseBean<List<DictionaryListRes>> projectClassify() {
         return projectService.projectClassify();
     }
+
     @ApiOperation("项目专业分类下拉列表")
     @PostMapping(value = "/specialtyClassify")
     public ResponseBean<List<DictionaryListRes>> specialtyClassify() {
         return projectService.specialtyClassify();
     }
+
     @ApiOperation("二级分类下拉列表")
     @PostMapping(value = "/twoClassify")
     public ResponseBean<List<DictionaryListRes>> twoClassify() {
         return projectService.twoClassify();
     }
 
+    @ApiOperationSupport(order = 6)
     @ApiOperation("删")
     @PostMapping(value = "/deleteById")
     public ResponseBean<?> deleteById(
@@ -59,6 +63,24 @@ public class ProjectController {
         return projectService.deleteById(id);
     }
 
+    @ApiOperationSupport(order = 3)
+    @ApiOperation("审批通过")
+    @PostMapping(value = "/approve")
+    public ResponseBean<?> approve(
+            @RequestParam Integer id
+    ) {
+        return projectService.approve(id);
+    }
+
+    @ApiOperationSupport(order = 4)
+    @ApiOperation("审批拒绝")
+    @PostMapping(value = "/reject")
+    public ResponseBean<?> reject(
+            @RequestParam Integer id
+    ) {
+        return projectService.reject(id);
+    }
+
 
     @ApiOperation("批量删")
     @PostMapping(value = "/deleteBatch")
@@ -68,7 +90,7 @@ public class ProjectController {
         return projectService.deleteBatch(ids);
     }
 
-
+    @ApiOperationSupport(order = 5)
     @ApiOperation("改")
     @PostMapping(value = "/update")
     public ResponseBean<?> update(
@@ -78,6 +100,7 @@ public class ProjectController {
     }
 
 
+    @ApiOperationSupport(order = 1)
     @ApiOperation("分页查")
     @PostMapping(value = "/pageQuery")
     public ResponseBean<PageBean<ProjectQueryRes>> pageQuery(
@@ -86,12 +109,31 @@ public class ProjectController {
         return projectService.pageQuery(projectPageQueryReq);
     }
 
-    @ApiOperation("查")
-    @PostMapping(value = "/query")
-    public ResponseBean<List<ProjectQueryRes>> query(
-            @RequestBody ProjectQueryReq projectQueryReq
+    @ApiOperationSupport(order = 7)
+    @ApiOperation("根据地查询详情")
+    @PostMapping(value = "/findById")
+    public ResponseBean<ProjectQueryRes> findById(
+            @RequestParam Integer id
+    ) {
+        return projectService.findById(id);
+    }
+
+    @ApiOperationSupport(order = 8)
+    @ApiOperation("导入")
+    @PostMapping(value = "/importData")
+    public ResponseBean<?> importData(
+            @RequestParam("fileId") String fileId
+    ) {
+        return projectService.importData(fileId);
+    }
+
+    @ApiOperationSupport(order = 9)
+    @ApiOperation("导出")
+    @PostMapping(value = "/export")
+    public ResponseBean<?> export(
+            @RequestBody ProjectPageQueryReq projectPageQueryReq
     ) {
-        return projectService.query(projectQueryReq);
+        return projectService.export(projectPageQueryReq);
     }
 
 }

+ 38 - 0
src/main/java/com/migao/controller/PurchasingApprovalController.java

@@ -0,0 +1,38 @@
+package com.migao.controller;
+
+import com.migao.config.response.PageBean;
+import com.migao.config.response.ResponseBean;
+import com.migao.config.validation.Insert;
+import com.migao.entity.vo.req.ProjectInsertReq;
+import com.migao.entity.vo.req.ProjectPageQueryReq;
+import com.migao.entity.vo.req.PurchasingApprovalPageQueryReq;
+import com.migao.entity.vo.res.ProjectQueryRes;
+import com.migao.entity.vo.res.PurchasingApprovalQueryRes;
+import com.migao.service.PurchasingApprovalService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiOperationSupport;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@Api(tags = "005.采购审批")
+@RestController
+@RequestMapping("/purchasingApproval")
+public class PurchasingApprovalController {
+    @Resource
+    private PurchasingApprovalService purchasingApprovalService;
+
+    @ApiOperationSupport(order = 1)
+    @ApiOperation("分页查")
+    @PostMapping(value = "/pageQuery")
+    public ResponseBean<PageBean<PurchasingApprovalQueryRes>> pageQuery(
+            @RequestBody PurchasingApprovalPageQueryReq purchasingApprovalPageQueryReq
+    ) {
+        return purchasingApprovalService.pageQuery(purchasingApprovalPageQueryReq);
+    }
+}

+ 37 - 0
src/main/java/com/migao/entity/vo/req/MilestoneInsertReq.java

@@ -0,0 +1,37 @@
+package com.migao.entity.vo.req;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotEmpty;
+import java.time.LocalDateTime;
+import javax.validation.constraints.NotNull;
+
+
+/**
+ * @version 1.0
+ * @Author mwh
+ * @Date 2020/4/10 14:20
+ */
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+@Data
+public class MilestoneInsertReq {
+
+    @ApiModelProperty(value = "结束时间")
+    @NotNull(message = "结束时间不能为空")
+    private LocalDateTime endTime;
+
+    @ApiModelProperty(value = "名称")
+    @NotEmpty(message = "名称不能为空")
+    private String name;
+
+    @ApiModelProperty(value = "项目id")
+    @NotNull(message = "项目id不能为空")
+    private Integer projectId;
+}

+ 37 - 0
src/main/java/com/migao/entity/vo/req/MilestonePageQueryReq.java

@@ -0,0 +1,37 @@
+package com.migao.entity.vo.req;
+
+import com.migao.config.response.BasePageRequest;
+import lombok.*;
+import io.swagger.annotations.ApiModelProperty;
+import java.time.LocalDateTime;
+
+/**
+ * @version 1.0
+ * @Author mwh
+ * @Date 2020/4/10 14:20
+ */
+@NoArgsConstructor
+@AllArgsConstructor
+@Data
+public class MilestonePageQueryReq extends BasePageRequest {
+
+    @ApiModelProperty(value = "主键")
+    private Integer id;
+    @ApiModelProperty(value = "创建时间")
+    private LocalDateTime createTime;
+    @ApiModelProperty(value = "")
+    private Integer createUserId;
+    @ApiModelProperty(value = "逻辑删除 0未删除 1已删除")
+    private Integer deleted;
+    @ApiModelProperty(value = "结束时间")
+    private LocalDateTime endTime;
+    @ApiModelProperty(value = "名称")
+    private String name;
+    @ApiModelProperty(value = "项目id")
+    private Integer projectId;
+    @ApiModelProperty(value = "进度")
+    private String schedule;
+    @ApiModelProperty(value = "状态")
+    private String status;
+
+}

+ 40 - 0
src/main/java/com/migao/entity/vo/req/MilestoneQueryReq.java

@@ -0,0 +1,40 @@
+package com.migao.entity.vo.req;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import io.swagger.annotations.ApiModelProperty;
+import java.time.LocalDateTime;
+
+/**
+ * @version 1.0
+ * @Author mwh
+ * @Date 2020/4/10 14:20
+ */
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+@Data
+public class MilestoneQueryReq {
+
+    @ApiModelProperty(value = "主键")
+    private Integer id;
+    @ApiModelProperty(value = "创建时间")
+    private LocalDateTime createTime;
+    @ApiModelProperty(value = "")
+    private Integer createUserId;
+    @ApiModelProperty(value = "逻辑删除 0未删除 1已删除")
+    private Integer deleted;
+    @ApiModelProperty(value = "结束时间")
+    private LocalDateTime endTime;
+    @ApiModelProperty(value = "名称")
+    private String name;
+    @ApiModelProperty(value = "项目id")
+    private Integer projectId;
+    @ApiModelProperty(value = "进度")
+    private String schedule;
+    @ApiModelProperty(value = "状态")
+    private String status;
+
+}

+ 52 - 0
src/main/java/com/migao/entity/vo/req/MilestoneUpdateReq.java

@@ -0,0 +1,52 @@
+package com.migao.entity.vo.req;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDateTime;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @version 1.0
+ * @Author mwh
+ * @Date 2020/4/10 14:20
+ */
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+@Data
+public class MilestoneUpdateReq {
+
+    @ApiModelProperty(value = "主键")
+        @NotNull(message = "主键不能为空")
+    private Integer id;
+    @ApiModelProperty(value = "创建时间")
+        @NotNull(message = "创建时间不能为空")
+    private LocalDateTime createTime;
+    @ApiModelProperty(value = "")
+        @NotNull(message = "不能为空")
+    private Integer createUserId;
+    @ApiModelProperty(value = "逻辑删除 0未删除 1已删除")
+        @NotNull(message = "逻辑删除 0未删除 1已删除不能为空")
+    private Integer deleted;
+    @ApiModelProperty(value = "结束时间")
+        @NotNull(message = "结束时间不能为空")
+    private LocalDateTime endTime;
+    @ApiModelProperty(value = "名称")
+        @NotEmpty(message = "名称不能为空")
+    private String name;
+    @ApiModelProperty(value = "项目id")
+        @NotNull(message = "项目id不能为空")
+    private Integer projectId;
+    @ApiModelProperty(value = "进度")
+        @NotEmpty(message = "进度不能为空")
+    private String schedule;
+    @ApiModelProperty(value = "状态")
+        @NotEmpty(message = "状态不能为空")
+    private String status;
+
+}

+ 2 - 5
src/main/java/com/migao/entity/vo/req/ProjectInsertReq.java

@@ -12,11 +12,6 @@ import java.time.LocalDateTime;
 import javax.validation.constraints.NotNull;
 
 
-/**
- * @version 1.0
- * @Author mwh
- * @Date 2020/4/10 14:20
- */
 @NoArgsConstructor
 @AllArgsConstructor
 @Builder
@@ -31,6 +26,8 @@ public class ProjectInsertReq {
     @NotEmpty(message = "项目内容不能为空")
     private String content;
 
+    private Integer parentId;
+
     @ApiModelProperty(value = "成本性(万元)")
     @NotEmpty(message = "成本性(万元)不能为空")
     private String cost;

+ 33 - 22
src/main/java/com/migao/entity/vo/req/ProjectUpdateReq.java

@@ -8,6 +8,7 @@ import lombok.NoArgsConstructor;
 import java.time.LocalDateTime;
 import javax.validation.constraints.NotEmpty;
 import javax.validation.constraints.NotNull;
+
 import io.swagger.annotations.ApiModelProperty;
 
 /**
@@ -22,58 +23,68 @@ import io.swagger.annotations.ApiModelProperty;
 public class ProjectUpdateReq {
 
     @ApiModelProperty(value = "主键")
-        @NotNull(message = "主键不能为空")
+    @NotNull(message = "主键不能为空")
     private Integer id;
+
     @ApiModelProperty(value = "资本性(万元)")
-        @NotEmpty(message = "资本性(万元)不能为空")
+    @NotEmpty(message = "资本性(万元)不能为空")
     private String capital;
+
     @ApiModelProperty(value = "项目内容")
-        @NotEmpty(message = "项目内容不能为空")
+    @NotEmpty(message = "项目内容不能为空")
     private String content;
+
     @ApiModelProperty(value = "成本性(万元)")
-        @NotEmpty(message = "成本性(万元)不能为空")
+    @NotEmpty(message = "成本性(万元)不能为空")
     private String cost;
+
     @ApiModelProperty(value = "储备年份")
-        @NotNull(message = "储备年份不能为空")
+    @NotNull(message = "储备年份不能为空")
     private LocalDateTime createTime;
-    @ApiModelProperty(value = "")
-        @NotNull(message = "不能为空")
-    private Integer createUserId;
-    @ApiModelProperty(value = "逻辑删除 0未删除 1已删除")
-        @NotNull(message = "逻辑删除 0未删除 1已删除不能为空")
-    private Integer deleted;
+
+
     @ApiModelProperty(value = "重要等级")
-        @NotEmpty(message = "重要等级不能为空")
+    @NotEmpty(message = "重要等级不能为空")
     private String level;
+
     @ApiModelProperty(value = "项目名称")
-        @NotEmpty(message = "项目名称不能为空")
+    @NotEmpty(message = "项目名称不能为空")
     private String name;
+
     @ApiModelProperty(value = "可研情况")
-        @NotEmpty(message = "可研情况不能为空")
+    @NotEmpty(message = "可研情况不能为空")
     private String progress;
+
     @ApiModelProperty(value = "项目分类")
-        @NotEmpty(message = "项目分类不能为空")
+    @NotEmpty(message = "项目分类不能为空")
     private String projectClassify;
+
     @ApiModelProperty(value = "项目专业分类")
-        @NotEmpty(message = "项目专业分类不能为空")
+    @NotEmpty(message = "项目专业分类不能为空")
     private String specialtyClassify;
+
     @ApiModelProperty(value = "合计(万元)")
-        @NotEmpty(message = "合计(万元)不能为空")
+    @NotEmpty(message = "合计(万元)不能为空")
     private String total;
+
     @ApiModelProperty(value = "总投资(万元)")
-        @NotEmpty(message = "总投资(万元)不能为空")
+    @NotEmpty(message = "总投资(万元)不能为空")
     private String totalInvestment;
+
     @ApiModelProperty(value = "二级分类")
-        @NotEmpty(message = "二级分类不能为空")
+    @NotEmpty(message = "二级分类不能为空")
     private String twoClassify;
+
     @ApiModelProperty(value = "填报单位")
-        @NotEmpty(message = "填报单位不能为空")
+    @NotEmpty(message = "填报单位不能为空")
     private String unit;
+
     @ApiModelProperty(value = "下达状态")
-        @NotEmpty(message = "下达状态不能为空")
+    @NotEmpty(message = "下达状态不能为空")
     private String orderStatus;
+
     @ApiModelProperty(value = "储备状态")
-        @NotEmpty(message = "储备状态不能为空")
+    @NotEmpty(message = "储备状态不能为空")
     private String reserveStatus;
 
 }

+ 47 - 0
src/main/java/com/migao/entity/vo/req/PurchasingApprovalInsertReq.java

@@ -0,0 +1,47 @@
+package com.migao.entity.vo.req;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import javax.validation.constraints.NotEmpty;
+import java.time.LocalDateTime;
+import javax.validation.constraints.NotNull;
+
+
+/**
+ * @version 1.0
+ * @Author mwh
+ * @Date 2020/4/10 14:20
+ */
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+@Data
+public class PurchasingApprovalInsertReq {
+
+        @ApiModelProperty(value = "主键")
+            @NotNull(message = "主键不能为空")
+        private Integer id;
+        @ApiModelProperty(value = "创建时间")
+            @NotNull(message = "创建时间不能为空")
+        private LocalDateTime createTime;
+        @ApiModelProperty(value = "")
+            @NotNull(message = "不能为空")
+        private Integer createUserId;
+        @ApiModelProperty(value = "逻辑删除 0未删除 1已删除")
+            @NotNull(message = "逻辑删除 0未删除 1已删除不能为空")
+        private Integer deleted;
+        @ApiModelProperty(value = "父id")
+            @NotNull(message = "父id不能为空")
+        private Long parentId;
+        @ApiModelProperty(value = "采购阶段")
+            @NotEmpty(message = "采购阶段不能为空")
+        private String stage;
+        @ApiModelProperty(value = "完成状态")
+            @NotEmpty(message = "完成状态不能为空")
+        private String status;
+
+}

+ 33 - 0
src/main/java/com/migao/entity/vo/req/PurchasingApprovalPageQueryReq.java

@@ -0,0 +1,33 @@
+package com.migao.entity.vo.req;
+
+import com.migao.config.response.BasePageRequest;
+import lombok.*;
+import io.swagger.annotations.ApiModelProperty;
+import java.time.LocalDateTime;
+
+/**
+ * @version 1.0
+ * @Author mwh
+ * @Date 2020/4/10 14:20
+ */
+@NoArgsConstructor
+@AllArgsConstructor
+@Data
+public class PurchasingApprovalPageQueryReq extends BasePageRequest {
+
+    @ApiModelProperty(value = "主键")
+    private Integer id;
+    @ApiModelProperty(value = "创建时间")
+    private LocalDateTime createTime;
+    @ApiModelProperty(value = "")
+    private Integer createUserId;
+    @ApiModelProperty(value = "逻辑删除 0未删除 1已删除")
+    private Integer deleted;
+    @ApiModelProperty(value = "父id")
+    private Long parentId;
+    @ApiModelProperty(value = "采购阶段")
+    private String stage;
+    @ApiModelProperty(value = "完成状态")
+    private String status;
+
+}

+ 36 - 0
src/main/java/com/migao/entity/vo/req/PurchasingApprovalQueryReq.java

@@ -0,0 +1,36 @@
+package com.migao.entity.vo.req;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import io.swagger.annotations.ApiModelProperty;
+import java.time.LocalDateTime;
+
+/**
+ * @version 1.0
+ * @Author mwh
+ * @Date 2020/4/10 14:20
+ */
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+@Data
+public class PurchasingApprovalQueryReq {
+
+    @ApiModelProperty(value = "主键")
+    private Integer id;
+    @ApiModelProperty(value = "创建时间")
+    private LocalDateTime createTime;
+    @ApiModelProperty(value = "")
+    private Integer createUserId;
+    @ApiModelProperty(value = "逻辑删除 0未删除 1已删除")
+    private Integer deleted;
+    @ApiModelProperty(value = "父id")
+    private Long parentId;
+    @ApiModelProperty(value = "采购阶段")
+    private String stage;
+    @ApiModelProperty(value = "完成状态")
+    private String status;
+
+}

+ 47 - 0
src/main/java/com/migao/entity/vo/req/PurchasingApprovalUpdateReq.java

@@ -0,0 +1,47 @@
+package com.migao.entity.vo.req;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDateTime;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @version 1.0
+ * @Author mwh
+ * @Date 2020/4/10 14:20
+ */
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+@Data
+public class PurchasingApprovalUpdateReq {
+
+    @ApiModelProperty(value = "主键")
+    @NotNull(message = "主键不能为空")
+    private Integer id;
+    @ApiModelProperty(value = "创建时间")
+    @NotNull(message = "创建时间不能为空")
+    private LocalDateTime createTime;
+    @ApiModelProperty(value = "")
+    @NotNull(message = "不能为空")
+    private Integer createUserId;
+    @ApiModelProperty(value = "逻辑删除 0未删除 1已删除")
+    @NotNull(message = "逻辑删除 0未删除 1已删除不能为空")
+    private Integer deleted;
+    @ApiModelProperty(value = "父id")
+    @NotNull(message = "父id不能为空")
+    private Long parentId;
+    @ApiModelProperty(value = "采购阶段")
+    @NotEmpty(message = "采购阶段不能为空")
+    private String stage;
+    @ApiModelProperty(value = "完成状态")
+    @NotEmpty(message = "完成状态不能为空")
+    private String status;
+
+}

+ 79 - 0
src/main/java/com/migao/entity/vo/req/SubProjectInsertReq.java

@@ -0,0 +1,79 @@
+package com.migao.entity.vo.req;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.time.LocalDateTime;
+
+
+
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+@Data
+public class SubProjectInsertReq {
+    @ApiModelProperty(value = "资本性(万元)")
+    @NotEmpty(message = "资本性(万元)不能为空")
+    private String capital;
+
+    @ApiModelProperty(value = "项目内容")
+    @NotEmpty(message = "项目内容不能为空")
+    private String content;
+
+    @NotEmpty(message = "父级项目id不能为空")
+    private Integer parentId;
+
+
+    @NotEmpty(message = "里程碑id不能为空")
+    private Integer milestoneId;
+
+    @ApiModelProperty(value = "成本性(万元)")
+    @NotEmpty(message = "成本性(万元)不能为空")
+    private String cost;
+
+    @ApiModelProperty(value = "储备年份")
+    @NotNull(message = "储备年份不能为空")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "重要等级")
+    @NotEmpty(message = "重要等级不能为空")
+    private String level;
+
+    @ApiModelProperty(value = "项目名称")
+    @NotEmpty(message = "项目名称不能为空")
+    private String name;
+
+    @ApiModelProperty(value = "可研情况")
+    @NotEmpty(message = "可研情况不能为空")
+    private String progress;
+
+    @ApiModelProperty(value = "项目分类")
+    @NotEmpty(message = "项目分类不能为空")
+    private String projectClassify;
+
+    @ApiModelProperty(value = "项目专业分类")
+    @NotEmpty(message = "项目专业分类不能为空")
+    private String specialtyClassify;
+
+    @ApiModelProperty(value = "合计(万元)")
+    @NotEmpty(message = "合计(万元)不能为空")
+    private String total;
+
+    @ApiModelProperty(value = "总投资(万元)")
+    @NotEmpty(message = "总投资(万元)不能为空")
+    private String totalInvestment;
+
+    @ApiModelProperty(value = "二级分类")
+    @NotEmpty(message = "二级分类不能为空")
+    private String twoClassify;
+
+    @ApiModelProperty(value = "填报单位")
+    @NotEmpty(message = "填报单位不能为空")
+    private String unit;
+
+}

+ 40 - 0
src/main/java/com/migao/entity/vo/res/MilestoneQueryRes.java

@@ -0,0 +1,40 @@
+package com.migao.entity.vo.res;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import io.swagger.annotations.ApiModelProperty;
+import java.time.LocalDateTime;
+
+/**
+ * @version 1.0
+ * @Author mwh
+ * @Date 2020/4/10 14:20
+ */
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+@Data
+public class MilestoneQueryRes {
+
+    @ApiModelProperty(value = "主键")
+    private Integer id;
+    @ApiModelProperty(value = "创建时间")
+    private LocalDateTime createTime;
+    @ApiModelProperty(value = "")
+    private Integer createUserId;
+    @ApiModelProperty(value = "逻辑删除 0未删除 1已删除")
+    private Integer deleted;
+    @ApiModelProperty(value = "结束时间")
+    private LocalDateTime endTime;
+    @ApiModelProperty(value = "名称")
+    private String name;
+    @ApiModelProperty(value = "项目id")
+    private Integer projectId;
+    @ApiModelProperty(value = "进度")
+    private String schedule;
+    @ApiModelProperty(value = "状态")
+    private String status;
+
+}

+ 36 - 0
src/main/java/com/migao/entity/vo/res/PurchasingApprovalQueryRes.java

@@ -0,0 +1,36 @@
+package com.migao.entity.vo.res;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import io.swagger.annotations.ApiModelProperty;
+import java.time.LocalDateTime;
+
+/**
+ * @version 1.0
+ * @Author mwh
+ * @Date 2020/4/10 14:20
+ */
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+@Data
+public class PurchasingApprovalQueryRes {
+
+    @ApiModelProperty(value = "主键")
+    private Integer id;
+    @ApiModelProperty(value = "创建时间")
+    private LocalDateTime createTime;
+    @ApiModelProperty(value = "")
+    private Integer createUserId;
+    @ApiModelProperty(value = "逻辑删除 0未删除 1已删除")
+    private Integer deleted;
+    @ApiModelProperty(value = "父id")
+    private Long parentId;
+    @ApiModelProperty(value = "采购阶段")
+    private String stage;
+    @ApiModelProperty(value = "完成状态")
+    private String status;
+
+}

+ 9 - 0
src/main/java/com/migao/mapper/MilestoneRepository.java

@@ -0,0 +1,9 @@
+package com.migao.mapper;
+
+import com.migao.entity.po.Milestone;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+
+public interface MilestoneRepository extends JpaRepository<Milestone, Integer>, JpaSpecificationExecutor<Milestone> {
+
+}

+ 18 - 1
src/main/java/com/migao/service/MilestoneService.java

@@ -1,10 +1,27 @@
 package com.migao.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.migao.config.response.PageBean;
+import com.migao.config.response.ResponseBean;
 import com.migao.entity.po.Milestone;
+import com.migao.entity.vo.req.MilestoneInsertReq;
+import com.migao.entity.vo.req.MilestonePageQueryReq;
+import com.migao.entity.vo.req.MilestoneUpdateReq;
+import com.migao.entity.vo.res.MilestoneQueryRes;
+
+import java.util.List;
 
 /**
  * @author dingsong
  */
-public interface MilestoneService extends IService<Milestone> {
+public interface MilestoneService{
+    ResponseBean<?> insert(MilestoneInsertReq milestoneInsertReq);
+
+    ResponseBean<?> deleteById(Integer id);
+
+    ResponseBean<?> deleteBatch(List<Integer> ids);
+
+    ResponseBean<?> update(MilestoneUpdateReq milestoneUpdateReq);
+
+    ResponseBean<PageBean<MilestoneQueryRes>> pageQuery(MilestonePageQueryReq milestonePageQueryReq);
 }

+ 15 - 4
src/main/java/com/migao/service/ProjectService.java

@@ -2,10 +2,7 @@ package com.migao.service;
 
 import com.migao.config.response.PageBean;
 import com.migao.config.response.ResponseBean;
-import com.migao.entity.vo.req.ProjectInsertReq;
-import com.migao.entity.vo.req.ProjectPageQueryReq;
-import com.migao.entity.vo.req.ProjectQueryReq;
-import com.migao.entity.vo.req.ProjectUpdateReq;
+import com.migao.entity.vo.req.*;
 import com.migao.entity.vo.res.DictionaryListRes;
 import com.migao.entity.vo.res.ProjectQueryRes;
 
@@ -66,4 +63,18 @@ public interface ProjectService {
     ResponseBean<List<DictionaryListRes>> specialtyClassify();
 
     ResponseBean<List<DictionaryListRes>> twoClassify();
+
+    ResponseBean<ProjectQueryRes> findById(Integer id);
+
+    ResponseBean<?> approve(Integer id);
+
+    ResponseBean<?> reject(Integer id);
+
+    ResponseBean<?> importData(String fileId);
+
+    ResponseBean<?> export(ProjectPageQueryReq projectPageQueryReq);
+
+    ResponseBean<PageBean<ProjectQueryRes>> pageQueryControl(ProjectPageQueryReq projectPageQueryReq);
+
+    ResponseBean<?> insertSubProject(SubProjectInsertReq subProjectInsertReq);
 }

+ 6 - 1
src/main/java/com/migao/service/PurchasingApprovalService.java

@@ -1,7 +1,12 @@
 package com.migao.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.migao.config.response.PageBean;
+import com.migao.config.response.ResponseBean;
 import com.migao.entity.po.PurchasingApproval;
+import com.migao.entity.vo.req.PurchasingApprovalPageQueryReq;
+import com.migao.entity.vo.res.PurchasingApprovalQueryRes;
 
-public interface PurchasingApprovalService extends IService<PurchasingApproval> {
+public interface PurchasingApprovalService{
+    ResponseBean<PageBean<PurchasingApprovalQueryRes>> pageQuery(PurchasingApprovalPageQueryReq purchasingApprovalPageQueryReq);
 }

+ 129 - 7
src/main/java/com/migao/service/impl/MilestoneServiceImpl.java

@@ -1,18 +1,140 @@
 package com.migao.service.impl;
 
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.migao.config.response.PageBean;
+import com.migao.config.response.ResponseBean;
+import com.migao.config.response.ResponseBuilder;
 import com.migao.entity.po.Milestone;
+import com.migao.entity.vo.req.MilestoneInsertReq;
+import com.migao.entity.vo.req.MilestonePageQueryReq;
+import com.migao.entity.vo.req.MilestoneQueryReq;
+import com.migao.entity.vo.req.MilestoneUpdateReq;
+import com.migao.entity.vo.res.MilestoneQueryRes;
 import com.migao.mapper.MilestoneMapper;
+import com.migao.mapper.MilestoneRepository;
 import com.migao.service.MilestoneService;
-import lombok.extern.slf4j.Slf4j;
+import com.migao.util.EntityUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.data.jpa.domain.Specification;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-/**
- * @author dingsong
- */
-@Slf4j
+import java.time.LocalDateTime;
+import javax.annotation.Resource;
+import javax.persistence.criteria.Predicate;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
 @Service
 @Transactional(rollbackFor = {Exception.class})
-public class MilestoneServiceImpl extends ServiceImpl<MilestoneMapper, Milestone> implements MilestoneService {
+public class MilestoneServiceImpl implements MilestoneService {
+
+
+    @Resource
+    private MilestoneMapper milestoneMapper;
+    @Resource
+    private MilestoneRepository milestoneRepository;
+
+
+    /**
+     * 增
+     *
+     * @param milestoneInsertReq milestoneInsertReq
+     * @return ?
+     */
+    @Override
+    public ResponseBean<?> insert(MilestoneInsertReq milestoneInsertReq) {
+        Milestone milestone = new Milestone();
+        BeanUtils.copyProperties(milestoneInsertReq, milestone);
+        milestone.setDeleted(0);
+        milestone.setSchedule("0");
+        return ResponseBuilder.ok(milestoneMapper.insert(milestone));
+    }
+
+    /**
+     * 分页查
+     *
+     * @param milestonePageQueryReq milestonePageQueryReq
+     * @return ?
+     */
+    @Override
+    public ResponseBean<PageBean<MilestoneQueryRes>> pageQuery(MilestonePageQueryReq milestonePageQueryReq) {
+        //1。分页查询所有供公司
+        Integer page = milestonePageQueryReq.getPage();
+        page = page == null ? 1 : page <= 0 ? 1 : page;
+        Integer size = milestonePageQueryReq.getSize();
+        size = size == null ? 10 : size <= 0 ? 10 : size;
+
+        LambdaQueryWrapper<Milestone> queryWrapper = new LambdaQueryWrapper<>();
+
+        Page<Milestone> all = milestoneMapper.selectPage(new Page<>(page, size), queryWrapper);
+        return ResponseBuilder.ok(
+                all,
+                element -> {
+                    MilestoneQueryRes milestoneQueryRes = MilestoneQueryRes
+                            .builder()
+                            .id(element.getId())
+                            .createTime(element.getCreateTime())
+                            .createUserId(element.getCreateUserId())
+                            .deleted(element.getDeleted())
+                            .endTime(element.getEndTime())
+                            .name(element.getName())
+                            .projectId(element.getProjectId())
+                            .schedule(element.getSchedule())
+                            .status(element.getStatus())
+                            .build();
+                    return milestoneQueryRes;
+                }
+        );
+    }
+
+    /**
+     * 删
+     *
+     * @param id id
+     * @return ?
+     */
+    @Override
+    public ResponseBean<?> deleteById(Integer id) {
+        milestoneRepository.findById(id).ifPresent(
+                i -> {
+                    i.setDeleted(1);
+                    milestoneRepository.save(i);
+                }
+        );
+        return ResponseBuilder.ok();
+    }
+
+    /**
+     * 批量删
+     *
+     * @param ids ids
+     * @return ?
+     */
+    @Override
+    public ResponseBean<?> deleteBatch(List<Integer> ids) {
+        milestoneRepository.findAllById(ids).forEach(
+                i -> {
+                    i.setDeleted(1);
+                    milestoneRepository.save(i);
+                }
+        );
+        return ResponseBuilder.ok();
+    }
+
+    /**
+     * 改
+     *
+     * @param milestoneUpdateReq milestoneUpdateReq
+     * @return ?
+     */
+    @Override
+    public ResponseBean<?> update(MilestoneUpdateReq milestoneUpdateReq) {
+        milestoneRepository.save(EntityUtils.copyProperties(milestoneUpdateReq, Milestone.class));
+        return ResponseBuilder.ok();
+    }
+
 }

+ 163 - 233
src/main/java/com/migao/service/impl/ProjectServiceImpl.java

@@ -1,17 +1,18 @@
 package com.migao.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.migao.config.constant.ProjectStatus;
 import com.migao.config.response.PageBean;
 import com.migao.config.response.ResponseBean;
 import com.migao.config.response.ResponseBuilder;
+import com.migao.entity.po.Milestone;
 import com.migao.entity.po.Project;
-import com.migao.entity.vo.req.ProjectInsertReq;
-import com.migao.entity.vo.req.ProjectPageQueryReq;
-import com.migao.entity.vo.req.ProjectQueryReq;
-import com.migao.entity.vo.req.ProjectUpdateReq;
+import com.migao.entity.vo.req.*;
 import com.migao.entity.vo.res.DictionaryListRes;
 import com.migao.entity.vo.res.ProjectQueryRes;
 import com.migao.mapper.DictionaryMapper;
+import com.migao.mapper.MilestoneMapper;
 import com.migao.mapper.ProjectMapper;
 import com.migao.mapper.ProjectRepository;
 import com.migao.service.ProjectService;
@@ -19,17 +20,13 @@ import com.migao.util.EntityUtils;
 import com.migao.util.ProjectNoUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageRequest;
-import org.springframework.data.jpa.domain.Specification;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-import java.time.LocalDateTime;
+
+
 import javax.annotation.Resource;
-import javax.persistence.criteria.Predicate;
-import java.util.ArrayList;
+import javax.validation.constraints.NotEmpty;
 import java.util.List;
-import java.util.stream.Collectors;
 
 @Service
 @Transactional(rollbackFor = {Exception.class})
@@ -39,9 +36,11 @@ public class ProjectServiceImpl implements ProjectService {
     private ProjectRepository projectRepository;
 
     @Resource
-    private  ProjectMapper projectMapper;
+    private ProjectMapper projectMapper;
     @Resource
     private DictionaryMapper dictionaryMapper;
+    @Resource
+    private MilestoneMapper milestoneMapper;
 
 
     /**
@@ -52,8 +51,8 @@ public class ProjectServiceImpl implements ProjectService {
      */
     @Override
     public ResponseBean<?> insert(ProjectInsertReq projectInsertReq) {
-        Project project=new Project();
-        BeanUtils.copyProperties(projectInsertReq,project);
+        Project project = new Project();
+        BeanUtils.copyProperties(projectInsertReq, project);
         project.setReserveStatus(ProjectStatus.TO_APPROVAL.getName());
         project.setDeleted(0);
         project.setParentId(0);
@@ -69,49 +68,22 @@ public class ProjectServiceImpl implements ProjectService {
      */
     @Override
     public ResponseBean<PageBean<ProjectQueryRes>> pageQuery(ProjectPageQueryReq projectPageQueryReq) {
-        String no = ProjectNoUtil.getCode();
         //1。分页查询所有供公司
         Integer page = projectPageQueryReq.getPage();
         page = page == null ? 1 : page <= 0 ? 1 : page;
         Integer size = projectPageQueryReq.getSize();
         size = size == null ? 10 : size <= 0 ? 10 : size;
-        PageRequest pageRequest = PageRequest.of(page - 1, size);
-        Specification<Project> projectSpecification = (root, criteriaQuery, criteriaBuilder) -> {
-            List<Predicate> predicateList = new ArrayList<>();
-
-                    if (projectPageQueryReq.getCreateTime()!=null) {
-                    Predicate equal = criteriaBuilder.equal(root.get("createTime").as(LocalDateTime.class),
-                    projectPageQueryReq.getCreateTime()
-                    );
-                    predicateList.add(equal);
-                    }
-                    if (StringUtils.isNotBlank(projectPageQueryReq.getName())) {
-                        Predicate like = criteriaBuilder.like(root.get("name").as(String.class),
-                        StringUtils.join(
-                        "%", projectPageQueryReq.getName(), "%"
-                        ));
-                        predicateList.add(like);
-                    }
-                    if (StringUtils.isNotBlank(projectPageQueryReq.getOrderStatus())) {
-                        Predicate like = criteriaBuilder.like(root.get("orderStatus").as(String.class),
-                        StringUtils.join(
-                        "%", projectPageQueryReq.getOrderStatus(), "%"
-                        ));
-                        predicateList.add(like);
-                    }
-                    if (StringUtils.isNotBlank(projectPageQueryReq.getReserveStatus())) {
-                        Predicate like = criteriaBuilder.like(root.get("reserveStatus").as(String.class),
-                        StringUtils.join(
-                        "%", projectPageQueryReq.getReserveStatus(), "%"
-                        ));
-                        predicateList.add(like);
-                    }
-            criteriaBuilder.equal(root.get("deleted").as(Integer.class),1);
-            Predicate[] predicateArray = new Predicate[predicateList.size()];
-            criteriaQuery.where(criteriaBuilder.and(predicateList.toArray(predicateArray)));
-            return criteriaQuery.getRestriction();
-        };
-        Page<Project> all = projectRepository.findAll(projectSpecification, pageRequest);
+        LambdaQueryWrapper<Project> queryWrapper = new LambdaQueryWrapper<>();
+        if (projectPageQueryReq.getCreateTime() != null) {
+        }
+        if (StringUtils.isNotBlank(projectPageQueryReq.getName())) {
+            queryWrapper.eq(Project::getCreateTime, projectPageQueryReq.getCreateTime());
+        }
+        if (StringUtils.isNotBlank(projectPageQueryReq.getOrderStatus())) {
+            queryWrapper.eq(Project::getOrderStatus, projectPageQueryReq.getOrderStatus());
+        }
+        queryWrapper.eq(Project::getReserveStatus, ProjectStatus.TO_APPROVAL.getName());
+        Page<Project> all = projectMapper.selectPage(new Page<>(page, size), queryWrapper);
         return ResponseBuilder.ok(
                 all,
                 element -> {
@@ -142,38 +114,39 @@ public class ProjectServiceImpl implements ProjectService {
     }
 
     /**
-    * 删
-    *
-    * @param id id
-    * @return ?
-    */
+     * 删
+     *
+     * @param id id
+     * @return ?
+     */
     @Override
     public ResponseBean<?> deleteById(Integer id) {
         projectRepository.findById(id).ifPresent(
-            i -> {
-                i.setDeleted(1);
-        projectRepository.save(i);
-            }
+                i -> {
+                    i.setDeleted(1);
+                    projectRepository.save(i);
+                }
         );
         return ResponseBuilder.ok();
     }
 
     /**
-    * 批量删
-    *
-    * @param ids ids
-    * @return ?
-    */
+     * 批量删
+     *
+     * @param ids ids
+     * @return ?
+     */
     @Override
     public ResponseBean<?> deleteBatch(List<Integer> ids) {
-            projectRepository.findAllById(ids).forEach(
-            i -> {
-                i.setDeleted(1);
-            projectRepository.save(i);
-            }
+        projectRepository.findAllById(ids).forEach(
+                i -> {
+                    i.setDeleted(1);
+                    projectRepository.save(i);
+                }
         );
         return ResponseBuilder.ok();
     }
+
     /**
      * 改
      *
@@ -182,154 +155,101 @@ public class ProjectServiceImpl implements ProjectService {
      */
     @Override
     public ResponseBean<?> update(ProjectUpdateReq projectUpdateReq) {
-            projectRepository.save(EntityUtils.copyProperties(projectUpdateReq, Project.class));
+        projectRepository.save(EntityUtils.copyProperties(projectUpdateReq, Project.class));
         return ResponseBuilder.ok();
     }
 
-    /**
-     * 查
-     *
-     * @param projectQueryReq projectQueryReq
-     * @return ?
-     */
     @Override
     public ResponseBean<List<ProjectQueryRes>> query(ProjectQueryReq projectQueryReq) {
+        return null;
+    }
+
+
+    @Override
+    public ResponseBean<List<DictionaryListRes>> projectClassify() {
+        String value = "项目分类";
+        List<DictionaryListRes> all = dictionaryMapper.findByValue(value);
+        return ResponseBuilder.ok(all);
+    }
+
+    @Override
+    public ResponseBean<List<DictionaryListRes>> specialtyClassify() {
+        String value = "项目专业分类";
+        List<DictionaryListRes> all = dictionaryMapper.findByValue(value);
+        return ResponseBuilder.ok(all);
+    }
+
+    @Override
+    public ResponseBean<List<DictionaryListRes>> twoClassify() {
+        String value = "二级分类";
+        List<DictionaryListRes> all = dictionaryMapper.findByValue(value);
+        return ResponseBuilder.ok(all);
+    }
+
+    @Override
+    public ResponseBean<ProjectQueryRes> findById(Integer id) {
+        Project project = projectMapper.selectById(id);
+        ProjectQueryRes projectQueryRes = new ProjectQueryRes();
+        BeanUtils.copyProperties(project, projectQueryRes);
+        return ResponseBuilder.ok(projectQueryRes);
+    }
+
+    @Override
+    public ResponseBean<?> approve(Integer id) {
+        Project project = projectMapper.selectById(id);
+        if (project == null) {
+            ResponseBuilder.fail("项目不存在");
+        }
+        project.setOrderStatus(ProjectStatus.RESERVES_ISSUED.getName());
+        project.setReserveStatus(ProjectStatus.APPROVE.getName());
+        projectMapper.updateById(project);
+        return ResponseBuilder.ok();
+    }
+
+    @Override
+    public ResponseBean<?> reject(Integer id) {
+        Project project = projectMapper.selectById(id);
+        if (project == null) {
+            ResponseBuilder.fail("项目不存在");
+        }
+        project.setReserveStatus(ProjectStatus.REJECT.getName());
+        projectMapper.updateById(project);
+        return ResponseBuilder.ok();
+    }
+
+    @Override
+    public ResponseBean<?> importData(String fileId) {
+        return null;
+    }
+
+    @Override
+    public ResponseBean<?> export(ProjectPageQueryReq projectPageQueryReq) {
+        return null;
+    }
+
+    @Override
+    public ResponseBean<PageBean<ProjectQueryRes>> pageQueryControl(ProjectPageQueryReq projectPageQueryReq) {
         //1。分页查询所有供公司
-        Specification<Project> projectSpecification = (root, criteriaQuery, criteriaBuilder) -> {
-        List<Predicate> predicateList = new ArrayList<>();
-                    if (projectQueryReq.getId()!=null) {
-                    Predicate equal = criteriaBuilder.equal(root.get("id").as(Integer.class),
-                    projectQueryReq.getId()
-                    );
-                    predicateList.add(equal);
-                    }
-                    if (StringUtils.isNotBlank(projectQueryReq.getCapital())) {
-                    Predicate like = criteriaBuilder.like(root.get("capital").as(String.class),
-                    StringUtils.join(
-                    "%", projectQueryReq.getCapital(), "%"
-                    ));
-                    predicateList.add(like);
-                    }
-                    if (StringUtils.isNotBlank(projectQueryReq.getContent())) {
-                    Predicate like = criteriaBuilder.like(root.get("content").as(String.class),
-                    StringUtils.join(
-                    "%", projectQueryReq.getContent(), "%"
-                    ));
-                    predicateList.add(like);
-                    }
-                    if (StringUtils.isNotBlank(projectQueryReq.getCost())) {
-                    Predicate like = criteriaBuilder.like(root.get("cost").as(String.class),
-                    StringUtils.join(
-                    "%", projectQueryReq.getCost(), "%"
-                    ));
-                    predicateList.add(like);
-                    }
-                    if (projectQueryReq.getCreateTime()!=null) {
-                    Predicate equal = criteriaBuilder.equal(root.get("createTime").as(LocalDateTime.class),
-                    projectQueryReq.getCreateTime()
-                    );
-                    predicateList.add(equal);
-                    }
-                    if (projectQueryReq.getCreateUserId()!=null) {
-                    Predicate equal = criteriaBuilder.equal(root.get("createUserId").as(Integer.class),
-                    projectQueryReq.getCreateUserId()
-                    );
-                    predicateList.add(equal);
-                    }
-                    if (projectQueryReq.getDeleted()!=null) {
-                    Predicate equal = criteriaBuilder.equal(root.get("deleted").as(Integer.class),
-                    projectQueryReq.getDeleted()
-                    );
-                    predicateList.add(equal);
-                    }
-                    if (StringUtils.isNotBlank(projectQueryReq.getLevel())) {
-                    Predicate like = criteriaBuilder.like(root.get("level").as(String.class),
-                    StringUtils.join(
-                    "%", projectQueryReq.getLevel(), "%"
-                    ));
-                    predicateList.add(like);
-                    }
-                    if (StringUtils.isNotBlank(projectQueryReq.getName())) {
-                    Predicate like = criteriaBuilder.like(root.get("name").as(String.class),
-                    StringUtils.join(
-                    "%", projectQueryReq.getName(), "%"
-                    ));
-                    predicateList.add(like);
-                    }
-                    if (StringUtils.isNotBlank(projectQueryReq.getProgress())) {
-                    Predicate like = criteriaBuilder.like(root.get("progress").as(String.class),
-                    StringUtils.join(
-                    "%", projectQueryReq.getProgress(), "%"
-                    ));
-                    predicateList.add(like);
-                    }
-                    if (StringUtils.isNotBlank(projectQueryReq.getProjectClassify())) {
-                    Predicate like = criteriaBuilder.like(root.get("projectClassify").as(String.class),
-                    StringUtils.join(
-                    "%", projectQueryReq.getProjectClassify(), "%"
-                    ));
-                    predicateList.add(like);
-                    }
-                    if (StringUtils.isNotBlank(projectQueryReq.getSpecialtyClassify())) {
-                    Predicate like = criteriaBuilder.like(root.get("specialtyClassify").as(String.class),
-                    StringUtils.join(
-                    "%", projectQueryReq.getSpecialtyClassify(), "%"
-                    ));
-                    predicateList.add(like);
-                    }
-                    if (StringUtils.isNotBlank(projectQueryReq.getTotal())) {
-                    Predicate like = criteriaBuilder.like(root.get("total").as(String.class),
-                    StringUtils.join(
-                    "%", projectQueryReq.getTotal(), "%"
-                    ));
-                    predicateList.add(like);
-                    }
-                    if (StringUtils.isNotBlank(projectQueryReq.getTotalInvestment())) {
-                    Predicate like = criteriaBuilder.like(root.get("totalInvestment").as(String.class),
-                    StringUtils.join(
-                    "%", projectQueryReq.getTotalInvestment(), "%"
-                    ));
-                    predicateList.add(like);
-                    }
-                    if (StringUtils.isNotBlank(projectQueryReq.getTwoClassify())) {
-                    Predicate like = criteriaBuilder.like(root.get("twoClassify").as(String.class),
-                    StringUtils.join(
-                    "%", projectQueryReq.getTwoClassify(), "%"
-                    ));
-                    predicateList.add(like);
-                    }
-                    if (StringUtils.isNotBlank(projectQueryReq.getUnit())) {
-                    Predicate like = criteriaBuilder.like(root.get("unit").as(String.class),
-                    StringUtils.join(
-                    "%", projectQueryReq.getUnit(), "%"
-                    ));
-                    predicateList.add(like);
-                    }
-                    if (StringUtils.isNotBlank(projectQueryReq.getOrderStatus())) {
-                    Predicate like = criteriaBuilder.like(root.get("orderStatus").as(String.class),
-                    StringUtils.join(
-                    "%", projectQueryReq.getOrderStatus(), "%"
-                    ));
-                    predicateList.add(like);
-                    }
-                    if (StringUtils.isNotBlank(projectQueryReq.getReserveStatus())) {
-                    Predicate like = criteriaBuilder.like(root.get("reserveStatus").as(String.class),
-                    StringUtils.join(
-                    "%", projectQueryReq.getReserveStatus(), "%"
-                    ));
-                    predicateList.add(like);
-                    }
-            criteriaBuilder.equal(root.get("deleted").as(Integer.class),1);
-            Predicate[] predicateArray = new Predicate[predicateList.size()];
-            criteriaQuery.where(criteriaBuilder.and(predicateList.toArray(predicateArray)));
-            return criteriaQuery.getRestriction();
-        };
-        List<Project> all = projectRepository.findAll(projectSpecification);
+        Integer page = projectPageQueryReq.getPage();
+        page = page == null ? 1 : page <= 0 ? 1 : page;
+        Integer size = projectPageQueryReq.getSize();
+        size = size == null ? 10 : size <= 0 ? 10 : size;
+        LambdaQueryWrapper<Project> queryWrapper = new LambdaQueryWrapper<>();
+        if (projectPageQueryReq.getCreateTime() != null) {
+        }
+        if (StringUtils.isNotBlank(projectPageQueryReq.getName())) {
+            queryWrapper.eq(Project::getCreateTime, projectPageQueryReq.getCreateTime());
+        }
+        if (StringUtils.isNotBlank(projectPageQueryReq.getOrderStatus())) {
+            queryWrapper.eq(Project::getOrderStatus, projectPageQueryReq.getOrderStatus());
+        }
+        queryWrapper.eq(Project::getOrderStatus, ProjectStatus.RESERVES_ISSUED.getName());
+        Page<Project> all = projectMapper.selectPage(new Page<>(page, size), queryWrapper);
         return ResponseBuilder.ok(
-                all.stream().map(
-                        element -> {
-                        ProjectQueryRes projectQueryRes = ProjectQueryRes
-                        .builder()
+                all,
+                element -> {
+                    ProjectQueryRes projectQueryRes = ProjectQueryRes
+                            .builder()
                             .id(element.getId())
                             .capital(String.valueOf(element.getCapital()))
                             .content(element.getContent())
@@ -348,31 +268,41 @@ public class ProjectServiceImpl implements ProjectService {
                             .unit(element.getUnit())
                             .orderStatus(String.valueOf(element.getOrderStatus()))
                             .reserveStatus(String.valueOf(element.getReserveStatus()))
-                        .build();
-                        return projectQueryRes;
-                        }
-                ).collect(Collectors.toList())
+                            .build();
+                    return projectQueryRes;
+                }
         );
     }
 
     @Override
-    public ResponseBean<List<DictionaryListRes>> projectClassify() {
-        String value="项目分类";
-        List<DictionaryListRes> all = dictionaryMapper.findByValue(value);
-        return ResponseBuilder.ok(all);
-    }
-
-    @Override
-    public ResponseBean<List<DictionaryListRes>> specialtyClassify() {
-        String value="项目专业分类";
-        List<DictionaryListRes> all = dictionaryMapper.findByValue(value);
-        return ResponseBuilder.ok(all);
-    }
+    public ResponseBean<?> insertSubProject(SubProjectInsertReq subProjectInsertReq) {
+        //查询父级项目
+        Project parProject = projectMapper.selectById(subProjectInsertReq.getParentId());
+        if (parProject==null){
+            return ResponseBuilder.fail("父级项目不存在");
+        }
+        //创建并关联父级项目
+        Project project = new Project();
+        BeanUtils.copyProperties(subProjectInsertReq, project);
+        project.setReserveStatus(ProjectStatus.APPROVE.getName());
+        project.setOrderStatus(ProjectStatus.TO_BE_REPORTED.getName());
+        project.setDeleted(0);
+        project.setParentId(subProjectInsertReq.getParentId());
+        project.setNo(ProjectNoUtil.getCode());
+        Project save = projectRepository.save(project);
 
-    @Override
-    public ResponseBean<List<DictionaryListRes>> twoClassify() {
-        String value="二级分类";
-        List<DictionaryListRes> all = dictionaryMapper.findByValue(value);
-        return ResponseBuilder.ok(all);
+        //更新项目下达状态
+        parProject.setOrderStatus(ProjectStatus.TO_BE_REPORTED.getName());
+        projectMapper.updateById(parProject);
+        //关联里程碑
+        Integer milestoneId = subProjectInsertReq.getMilestoneId();
+        Milestone milestone = milestoneMapper.selectById(milestoneId);
+        if (milestone == null) {
+            return ResponseBuilder.fail("里程碑不存在");
+        }
+        milestone.setProjectId(save.getId());
+        milestone.setDeleted(0);
+        milestoneMapper.updateById(milestone);
+        return ResponseBuilder.ok();
     }
 }

+ 8 - 0
src/main/java/com/migao/service/impl/PurchasingApprovalServiceImpl.java

@@ -1,7 +1,11 @@
 package com.migao.service.impl;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.migao.config.response.PageBean;
+import com.migao.config.response.ResponseBean;
 import com.migao.entity.po.PurchasingApproval;
+import com.migao.entity.vo.req.PurchasingApprovalPageQueryReq;
+import com.migao.entity.vo.res.PurchasingApprovalQueryRes;
 import com.migao.mapper.PurchasingApprovalMapper;
 import com.migao.service.PurchasingApprovalService;
 import lombok.extern.slf4j.Slf4j;
@@ -15,4 +19,8 @@ import org.springframework.transaction.annotation.Transactional;
 @Service
 @Transactional(rollbackFor = {Exception.class})
 public class PurchasingApprovalServiceImpl extends ServiceImpl<PurchasingApprovalMapper, PurchasingApproval> implements PurchasingApprovalService {
+    @Override
+    public ResponseBean<PageBean<PurchasingApprovalQueryRes>> pageQuery(PurchasingApprovalPageQueryReq purchasingApprovalPageQueryReq) {
+        return null;
+    }
 }