Browse Source

【数据规则】、【质量任务】、【数据主题】init

vincent 3 năm trước cách đây
mục cha
commit
ded79fc759
21 tập tin đã thay đổi với 891 bổ sung19 xóa
  1. 83 11
      server/src/main/java/edp/davinci/controller/DataRulesController.java
  2. 115 2
      server/src/main/java/edp/davinci/controller/DataSubjectController.java
  3. 176 2
      server/src/main/java/edp/davinci/controller/QualityTaskController.java
  4. 4 1
      server/src/main/java/edp/davinci/dao/DataRulesMapper.java
  5. 4 1
      server/src/main/java/edp/davinci/dao/DataSubjectMapper.java
  6. 36 0
      server/src/main/java/edp/davinci/dao/QualityAuditorMapper.java
  7. 4 1
      server/src/main/java/edp/davinci/dao/QualityTaskMapper.java
  8. 5 1
      server/src/main/java/edp/davinci/model/DataRules.java
  9. 2 0
      server/src/main/java/edp/davinci/model/DataSubject.java
  10. 37 0
      server/src/main/java/edp/davinci/model/QualityAuditor.java
  11. 2 0
      server/src/main/java/edp/davinci/model/QualityTask.java
  12. 14 0
      server/src/main/java/edp/davinci/service/DataRulesService.java
  13. 15 0
      server/src/main/java/edp/davinci/service/DataSubjectService.java
  14. 11 0
      server/src/main/java/edp/davinci/service/QualityAuditorService.java
  15. 14 0
      server/src/main/java/edp/davinci/service/QualityTaskService.java
  16. 8 0
      server/src/main/java/edp/davinci/service/impl/CronJobServiceImpl.java
  17. 39 0
      server/src/main/java/edp/davinci/service/impl/DataRulesServiceImpl.java
  18. 38 0
      server/src/main/java/edp/davinci/service/impl/DataSubjectServiceImpl.java
  19. 25 0
      server/src/main/java/edp/davinci/service/impl/QualityAuditorServiceImpl.java
  20. 157 0
      server/src/main/java/edp/davinci/service/impl/QualityTaskServiceImpl.java
  21. 102 0
      server/src/main/resources/mybatis/mapper/QualityAuditorMapper.xml

+ 83 - 11
server/src/main/java/edp/davinci/controller/DataRulesController.java

@@ -4,9 +4,9 @@ import edp.core.annotation.CurrentUser;
 import edp.davinci.common.controller.BaseController;
 import edp.davinci.core.common.Constants;
 import edp.davinci.core.common.ResultMap;
-import edp.davinci.model.Catalogue;
+import edp.davinci.model.DataRules;
 import edp.davinci.model.User;
-import edp.davinci.service.DataSubjectService;
+import edp.davinci.service.DataRulesService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiResponse;
@@ -31,20 +31,36 @@ import java.util.List;
 public class DataRulesController extends BaseController
 {
     @Autowired
-    private DataSubjectService dataSubjectService;
+    private DataRulesService dataRulesService;
+
+    /**
+     * 获取 数据规则
+     *
+     * @param user
+     * @param request
+     * @return
+     */
+    @ApiOperation(value = "get dataRules")
+    @GetMapping(value = "/getDataRules")
+    public ResponseEntity getDataRules(@ApiIgnore @CurrentUser User user,
+                                         HttpServletRequest request) {
+
+        List<DataRules> dataRules = dataRulesService.getDataRules();
+        return ResponseEntity.ok(new ResultMap(tokenUtils).successAndRefreshToken(request).payloads(dataRules));
+    }
 
     /**
      * 增加数据规则
      *
-     * @param catalogue
+     * @param dataRules
      * @param bindingResult
      * @param user
      * @param request
      * @return
      */
-    @ApiOperation(value = "create catalogue")
-    @PostMapping(value = "/createCatalogue",consumes = MediaType.APPLICATION_JSON_VALUE)
-    public ResponseEntity createCatalogue(@Valid @RequestBody Catalogue catalogue,
+    @ApiOperation(value = "create dataRules")
+    @PostMapping(value = "/createDataRules",consumes = MediaType.APPLICATION_JSON_VALUE)
+    public ResponseEntity createDataRules(@Valid @RequestBody DataRules dataRules,
                                           @ApiIgnore BindingResult bindingResult,
                                           @ApiIgnore @CurrentUser User user,
                                           HttpServletRequest request) {
@@ -54,9 +70,65 @@ public class DataRulesController extends BaseController
             return ResponseEntity.status(resultMap.getCode()).body(resultMap);
         }
 
-//        Catalogue catalogueInfo = catalogueService.createCatalogue(catalogue, user);
-//
-//        return ResponseEntity.ok(new ResultMap(tokenUtils).successAndRefreshToken(request).payload(catalogueInfo));
-        return null;
+        dataRules = dataRulesService.createDataRules(dataRules);
+
+        return ResponseEntity.ok(new ResultMap(tokenUtils).successAndRefreshToken(request).payload(dataRules));
+    }
+
+    /**
+     * 修改dataRules
+     *
+     * @param id
+     * @param dataRules
+     * @param bindingResult
+     * @param user
+     * @param request
+     * @return
+     */
+    @ApiOperation(value = "update dataRules")
+    @PutMapping(value = "/updateDataRules/{id}", consumes = MediaType.APPLICATION_JSON_VALUE)
+    public ResponseEntity updateDataRules(@PathVariable Long id,
+                                            @Valid @RequestBody DataRules dataRules,
+                                            @ApiIgnore BindingResult bindingResult,
+                                            @ApiIgnore @CurrentUser User user,
+                                            HttpServletRequest request) {
+
+
+        if (invalidId(id) || !id.equals(dataRules.getId())) {
+            ResultMap resultMap = new ResultMap(tokenUtils).failAndRefreshToken(request).message("Invalid dataSubject id");
+            return ResponseEntity.status(resultMap.getCode()).body(resultMap);
+        }
+
+        if (bindingResult.hasErrors()) {
+            ResultMap resultMap = new ResultMap(tokenUtils).failAndRefreshToken(request).message(bindingResult.getFieldErrors().get(0).getDefaultMessage());
+            return ResponseEntity.status(resultMap.getCode()).body(resultMap);
+        }
+
+        dataRulesService.updateDataRules(dataRules);
+        return ResponseEntity.ok(new ResultMap(tokenUtils).successAndRefreshToken(request));
+    }
+
+
+    /**
+     * 删除dataSubject
+     *
+     * @param id
+     * @param user
+     * @param request
+     * @return
+     */
+    @ApiOperation(value = "delete dataRules")
+    @DeleteMapping("/deleteDataRules/{id}")
+    public ResponseEntity deleteDataRules(@PathVariable Long id,
+                                            @ApiIgnore @CurrentUser User user,
+                                            HttpServletRequest request) {
+        if (invalidId(id)) {
+            ResultMap resultMap = new ResultMap(tokenUtils).failAndRefreshToken(request).message("Invalid dataSubject id");
+            return ResponseEntity.status(resultMap.getCode()).body(resultMap);
+        }
+
+        dataRulesService.deleteDataRules(id);
+
+        return ResponseEntity.ok(new ResultMap(tokenUtils).successAndRefreshToken(request));
     }
 }

+ 115 - 2
server/src/main/java/edp/davinci/controller/DataSubjectController.java

@@ -1,16 +1,28 @@
 package edp.davinci.controller;
 
+import edp.core.annotation.CurrentUser;
 import edp.davinci.common.controller.BaseController;
 import edp.davinci.core.common.Constants;
+import edp.davinci.core.common.ResultMap;
+import edp.davinci.model.Catalogue;
+import edp.davinci.model.DataSubject;
+import edp.davinci.model.User;
 import edp.davinci.service.DataSubjectService;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiResponse;
 import io.swagger.annotations.ApiResponses;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.MediaType;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.*;
+import springfox.documentation.annotations.ApiIgnore;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.validation.Valid;
+import java.util.List;
 
 @Api(value = "/dataSubject", tags = "dataSubject", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
 @ApiResponses(@ApiResponse(code = 404, message = "dataSubject not found"))
@@ -21,4 +33,105 @@ public class DataSubjectController extends BaseController
 {
     @Autowired
     private DataSubjectService dataSubjectService;
+
+
+    /**
+     * 获取 主题
+     *
+     * @param user
+     * @param request
+     * @return
+     */
+    @ApiOperation(value = "get dataSubject")
+    @GetMapping(value = "/getDataSubject")
+    public ResponseEntity getDataSubject(@ApiIgnore @CurrentUser User user,
+                                        HttpServletRequest request) {
+
+        List<DataSubject> dataSubjects = dataSubjectService.getDataSubject();
+        return ResponseEntity.ok(new ResultMap(tokenUtils).successAndRefreshToken(request).payloads(dataSubjects));
+    }
+
+    /**
+     * 新建主题
+     *
+     * @param dataSubject
+     * @param bindingResult
+     * @param user
+     * @param request
+     * @return
+     */
+    @ApiOperation(value = "create dataSubject")
+    @PostMapping(value = "/createDataSubject",consumes = MediaType.APPLICATION_JSON_VALUE)
+    public ResponseEntity createDataSubject(@Valid @RequestBody DataSubject dataSubject,
+                                          @ApiIgnore BindingResult bindingResult,
+                                          @ApiIgnore @CurrentUser User user,
+                                          HttpServletRequest request) {
+
+        if (bindingResult.hasErrors()) {
+            ResultMap resultMap = new ResultMap(tokenUtils).failAndRefreshToken(request).message(bindingResult.getFieldErrors().get(0).getDefaultMessage());
+            return ResponseEntity.status(resultMap.getCode()).body(resultMap);
+        }
+
+        dataSubject = dataSubjectService.createDataSubject(dataSubject);
+
+        return ResponseEntity.ok(new ResultMap(tokenUtils).successAndRefreshToken(request).payload(dataSubject));
+    }
+
+    /**
+     * 修改dataSubject
+     *
+     * @param id
+     * @param dataSubject
+     * @param bindingResult
+     * @param user
+     * @param request
+     * @return
+     */
+    @ApiOperation(value = "update dataSubject")
+    @PutMapping(value = "/updateDataSubject/{id}", consumes = MediaType.APPLICATION_JSON_VALUE)
+    public ResponseEntity updateDataSubject(@PathVariable Long id,
+                                          @Valid @RequestBody DataSubject dataSubject,
+                                          @ApiIgnore BindingResult bindingResult,
+                                          @ApiIgnore @CurrentUser User user,
+                                          HttpServletRequest request) {
+
+
+        if (invalidId(id) || !id.equals(dataSubject.getId())) {
+            ResultMap resultMap = new ResultMap(tokenUtils).failAndRefreshToken(request).message("Invalid dataSubject id");
+            return ResponseEntity.status(resultMap.getCode()).body(resultMap);
+        }
+
+        if (bindingResult.hasErrors()) {
+            ResultMap resultMap = new ResultMap(tokenUtils).failAndRefreshToken(request).message(bindingResult.getFieldErrors().get(0).getDefaultMessage());
+            return ResponseEntity.status(resultMap.getCode()).body(resultMap);
+        }
+
+        dataSubjectService.updateDataSubject(dataSubject);
+        return ResponseEntity.ok(new ResultMap(tokenUtils).successAndRefreshToken(request));
+    }
+
+
+    /**
+     * 删除dataSubject
+     *
+     * @param id
+     * @param user
+     * @param request
+     * @return
+     */
+    @ApiOperation(value = "delete dataSubject")
+    @DeleteMapping("/deleteDataSubject/{id}")
+    public ResponseEntity deleteDataSubject(@PathVariable Long id,
+                                          @ApiIgnore @CurrentUser User user,
+                                          HttpServletRequest request) {
+        if (invalidId(id)) {
+            ResultMap resultMap = new ResultMap(tokenUtils).failAndRefreshToken(request).message("Invalid dataSubject id");
+            return ResponseEntity.status(resultMap.getCode()).body(resultMap);
+        }
+
+        dataSubjectService.deleteDataSubject(id);
+
+        return ResponseEntity.ok(new ResultMap(tokenUtils).successAndRefreshToken(request));
+    }
+
 }

+ 176 - 2
server/src/main/java/edp/davinci/controller/QualityTaskController.java

@@ -1,16 +1,29 @@
 package edp.davinci.controller;
 
+import edp.core.annotation.CurrentUser;
 import edp.davinci.common.controller.BaseController;
 import edp.davinci.core.common.Constants;
+import edp.davinci.core.common.ResultMap;
+import edp.davinci.model.QualityAuditor;
+import edp.davinci.model.QualityTask;
+import edp.davinci.model.User;
+import edp.davinci.service.QualityAuditorService;
 import edp.davinci.service.QualityTaskService;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiResponse;
 import io.swagger.annotations.ApiResponses;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.MediaType;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.*;
+import springfox.documentation.annotations.ApiIgnore;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.validation.Valid;
+import java.util.List;
 
 @Api(value = "/qualityTask", tags = "qualityTask", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
 @ApiResponses(@ApiResponse(code = 404, message = "qualityTask not found"))
@@ -21,4 +34,165 @@ public class QualityTaskController extends BaseController
 {
     @Autowired
     private QualityTaskService qualityTaskService;
+
+    @Autowired
+    private QualityAuditorService qualityAuditorService;
+
+    /**
+     * 获取 质量任务
+     *
+     * @param user
+     * @param request
+     * @return
+     */
+    @ApiOperation(value = "get qualityTask")
+    @GetMapping(value = "/getQualityTask")
+    public ResponseEntity getQualityTask(@ApiIgnore @CurrentUser User user,
+                                       HttpServletRequest request) {
+
+        List<QualityTask> qualityTasks = qualityTaskService.getQualityTask();
+        return ResponseEntity.ok(new ResultMap(tokenUtils).successAndRefreshToken(request).payloads(qualityTasks));
+    }
+
+    /**
+     * 增加 质量任务
+     *
+     * @param qualityTask
+     * @param bindingResult
+     * @param user
+     * @param request
+     * @return
+     */
+    @ApiOperation(value = "create qualityTask")
+    @PostMapping(value = "/createQualityTask",consumes = MediaType.APPLICATION_JSON_VALUE)
+    public ResponseEntity createQualityTask(@Valid @RequestBody QualityTask qualityTask,
+                                          @ApiIgnore BindingResult bindingResult,
+                                          @ApiIgnore @CurrentUser User user,
+                                          HttpServletRequest request) {
+
+        if (bindingResult.hasErrors()) {
+            ResultMap resultMap = new ResultMap(tokenUtils).failAndRefreshToken(request).message(bindingResult.getFieldErrors().get(0).getDefaultMessage());
+            return ResponseEntity.status(resultMap.getCode()).body(resultMap);
+        }
+
+        qualityTask = qualityTaskService.createQualityTask(qualityTask);
+
+        return ResponseEntity.ok(new ResultMap(tokenUtils).successAndRefreshToken(request).payload(qualityTask));
+    }
+
+    /**
+     * 修改 qualityTask
+     *
+     * @param id
+     * @param qualityTask
+     * @param bindingResult
+     * @param user
+     * @param request
+     * @return
+     */
+    @ApiOperation(value = "update qualityTask")
+    @PutMapping(value = "/updateQualityTask/{id}", consumes = MediaType.APPLICATION_JSON_VALUE)
+    public ResponseEntity updateQualityTask(@PathVariable Long id,
+                                          @Valid @RequestBody QualityTask qualityTask,
+                                          @ApiIgnore BindingResult bindingResult,
+                                          @ApiIgnore @CurrentUser User user,
+                                          HttpServletRequest request) {
+
+
+        if (invalidId(id) || !id.equals(qualityTask.getId())) {
+            ResultMap resultMap = new ResultMap(tokenUtils).failAndRefreshToken(request).message("Invalid dataSubject id");
+            return ResponseEntity.status(resultMap.getCode()).body(resultMap);
+        }
+
+        if (bindingResult.hasErrors()) {
+            ResultMap resultMap = new ResultMap(tokenUtils).failAndRefreshToken(request).message(bindingResult.getFieldErrors().get(0).getDefaultMessage());
+            return ResponseEntity.status(resultMap.getCode()).body(resultMap);
+        }
+
+        qualityTaskService.updateQualityTask(qualityTask);
+        return ResponseEntity.ok(new ResultMap(tokenUtils).successAndRefreshToken(request));
+    }
+
+
+    /**
+     * 删除 qualityTask
+     *
+     * @param id
+     * @param user
+     * @param request
+     * @return
+     */
+    @ApiOperation(value = "delete qualityTask")
+    @DeleteMapping("/deleteQualityTask/{id}")
+    public ResponseEntity deleteQualityTask(@PathVariable Long id,
+                                          @ApiIgnore @CurrentUser User user,
+                                          HttpServletRequest request) {
+        if (invalidId(id)) {
+            ResultMap resultMap = new ResultMap(tokenUtils).failAndRefreshToken(request).message("Invalid dataSubject id");
+            return ResponseEntity.status(resultMap.getCode()).body(resultMap);
+        }
+
+        qualityTaskService.deleteQualityTask(id);
+
+        return ResponseEntity.ok(new ResultMap(tokenUtils).successAndRefreshToken(request));
+    }
+
+    /**
+     * 立即稽核
+     *
+     * @param id
+     * @param request
+     * @return
+     */
+    @ApiOperation(value = "auditor")
+    @PutMapping(value = "/auditor/{id}", consumes = MediaType.APPLICATION_JSON_VALUE)
+    public ResponseEntity auditor(@PathVariable Long id,HttpServletRequest request){
+        // 1. 根据任务id,查询质量任务
+        qualityTaskService.auditor(id);
+        // 2.
+
+        return ResponseEntity.ok(new ResultMap(tokenUtils).successAndRefreshToken(request));
+    }
+
+    /**
+     * 设置调度
+     *
+     * @param id
+     * @param request
+     * @return
+     */
+    @ApiOperation(value = "setDispatch")
+    @PutMapping(value = "/setDispatch/{id}", consumes = MediaType.APPLICATION_JSON_VALUE)
+    public ResponseEntity setDispatch(@PathVariable Long id,HttpServletRequest request){
+
+
+        return ResponseEntity.ok(new ResultMap(tokenUtils).successAndRefreshToken(request));
+    }
+
+
+    /**
+     *  质量报告
+     *
+     * @param user
+     * @param request
+     * @return
+     */
+    @ApiOperation(value = "get qualityReport")
+    @GetMapping(value = "/qualityReport")
+    public ResponseEntity qualityReport(@ApiIgnore @CurrentUser User user,
+                                         HttpServletRequest request) {
+
+        List<QualityAuditor> qualityAuditors = qualityAuditorService.getQualityAuditors();
+        return ResponseEntity.ok(new ResultMap(tokenUtils).successAndRefreshToken(request).payloads(qualityAuditors));
+    }
+
+    public static void main(String[] args)
+    {
+        int resultLimit = 10000;
+        int limit =-1;
+        int count = limit > resultLimit ? resultLimit : limit > 0 ? limit : resultLimit;
+        System.out.println(count);
+    }
+
+
 }

+ 4 - 1
server/src/main/java/edp/davinci/dao/DataRulesMapper.java

@@ -32,5 +32,8 @@ public interface DataRulesMapper
 
 
     @Select({"select * from `data_rules`"})
-    List<DataSubject> getDataRulesList();
+    List<DataRules> getDataRulesList();
+
+    @Select({"select * from `data_rules` where id = #{id}"})
+    DataRules getDataRule(@Param("id") Long id);
 }

+ 4 - 1
server/src/main/java/edp/davinci/dao/DataSubjectMapper.java

@@ -16,7 +16,7 @@ public interface DataSubjectMapper
 {
     int insert(DataSubject dataSubject);
 
-    @Delete({"delete from `dict_type` where dict_id = #{id}"})
+    @Delete({"delete from `data_subject` where id = #{id}"})
     int deleteById(@Param("id") Long id);
 
     @Update({
@@ -34,4 +34,7 @@ public interface DataSubjectMapper
 
     @Select({"select * from `data_subject`"})
     List<DataSubject> getDataSubjectList();
+
+    @Select({"select * from `data_subject` where id = #{id}"})
+    DataSubject getDataSubject(@Param("id") Long id);
 }

+ 36 - 0
server/src/main/java/edp/davinci/dao/QualityAuditorMapper.java

@@ -0,0 +1,36 @@
+package edp.davinci.dao;
+
+import edp.davinci.model.DataRules;
+import edp.davinci.model.QualityAuditor;
+import org.apache.ibatis.annotations.Delete;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+import org.apache.ibatis.annotations.Update;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+@Component
+public interface QualityAuditorMapper
+{
+    int insert(QualityAuditor qualityAuditor);
+
+    @Delete({"delete from `quality_auditor` where id = #{id}"})
+    int deleteById(@Param("id") Long id);
+
+    @Update({
+            "update `dict_type`",
+            "set `dict_name` = #{dictName,jdbcType=VARCHAR},",
+            "`dict_type` = #{dictType,jdbcType=VARCHAR},",
+            "`status` = #{status,jdbcType=BIGINT},",
+            "`remark` = #{remark,jdbcType=VARCHAR},",
+            "`update_by` = #{updateBy,jdbcType=BIGINT},",
+            "`update_time` = #{updateTime,jdbcType=TIMESTAMP}",
+            "where dict_id = #{dictId,jdbcType=BIGINT}"
+    })
+    int update(QualityAuditor qualityAuditor);
+
+
+    @Select({"select * from `quality_auditor`"})
+    List<QualityAuditor> getQualityAuditorList();
+}

+ 4 - 1
server/src/main/java/edp/davinci/dao/QualityTaskMapper.java

@@ -33,5 +33,8 @@ public interface QualityTaskMapper
 
 
     @Select({"select * from `quality_task`"})
-    List<DataSubject> getQualityTaskList();
+    List<QualityTask> getQualityTaskList();
+
+    @Select({"select * from `quality_task` where id = #{id}"})
+    QualityTask getQualityTask(@Param("id") Long id);
 }

+ 5 - 1
server/src/main/java/edp/davinci/model/DataRules.java

@@ -11,13 +11,17 @@ public class DataRules extends RecordInfo<DataRules>
 {
     private Long id;
 
+    private Long subjectId;  // 主题ID
+
     private String ruleCode; // 规则编号
 
     private String ruleName; // 规则名称
 
     private String ruleDesc; // 规则描述
 
-    private String ruleType; // 规则类型  range: 值域 length:长度 date_format:日期格式
+    private String inspectionType; // 规则 一致性、完整性、规范性、准确性
+
+    private String ruleType; // 规则类型  not_null: 非空 range: 值域 length:长度 date_format:日期格式
 
     private String ruleConfig; // 规则配置 {range:{from:,to:},length:,date_format:}
 

+ 2 - 0
server/src/main/java/edp/davinci/model/DataSubject.java

@@ -25,4 +25,6 @@ public class DataSubject extends RecordInfo<DataSubject>
 
     private String management; // 管理人员
 
+    private Long  pId; // 父级id
+
 }

+ 37 - 0
server/src/main/java/edp/davinci/model/QualityAuditor.java

@@ -0,0 +1,37 @@
+package edp.davinci.model;
+
+import edp.core.model.RecordInfo;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ *  质量稽核
+ */
+@Data
+public class QualityAuditor extends RecordInfo<QualityAuditor>
+{
+    private Long id;
+
+    private String auditorCode; // 稽核编号
+
+    private Date auditorTime; // 稽核时间
+
+    private Long taskId; // 任务ID
+
+    private Integer integrityCorrect; //完整性正确
+
+    private Integer integrityError; //完整性错误
+
+    private Integer uniformityCorrect; //一致性正确
+
+    private Integer uniformityError; //一致性错误
+
+    private Integer normativeCorrect; //规范性正确
+
+    private Integer normativeError; //规范性错误
+
+    private Integer accuracyCorrect; //准确性正确
+
+    private Integer accuracyError; //完整性错误
+}

+ 2 - 0
server/src/main/java/edp/davinci/model/QualityTask.java

@@ -13,6 +13,8 @@ public class QualityTask extends RecordInfo<QualityTask>
 
     private String metadataName; // 表名
 
+    private Long viewId; // view id
+
     private String metadataConfig; // [{"fieldName":"","fieldType":"","fieldAlias":"","subjectId":"","subjectName":""}]
 
 }

+ 14 - 0
server/src/main/java/edp/davinci/service/DataRulesService.java

@@ -1,5 +1,19 @@
 package edp.davinci.service;
 
+import edp.davinci.model.DataRules;
+
+import java.util.List;
+
 public interface DataRulesService
 {
+    List<DataRules> getDataRules();
+
+    DataRules createDataRules(DataRules dataRules);
+
+    void updateDataRules(DataRules dataRules);
+
+    void deleteDataRules(Long id);
+
+    DataRules getDataRule(Long id);
+
 }

+ 15 - 0
server/src/main/java/edp/davinci/service/DataSubjectService.java

@@ -1,5 +1,20 @@
 package edp.davinci.service;
 
+import edp.davinci.model.Catalogue;
+import edp.davinci.model.DataSubject;
+import edp.davinci.model.User;
+
+import java.util.List;
+
 public interface DataSubjectService
 {
+    DataSubject  createDataSubject(DataSubject dataSubject);
+
+    void updateDataSubject(DataSubject dataSubject);
+
+    List<DataSubject> getDataSubject();
+
+    void deleteDataSubject(Long id);
+
+    DataSubject  getOneDataSubject(Long id);
 }

+ 11 - 0
server/src/main/java/edp/davinci/service/QualityAuditorService.java

@@ -0,0 +1,11 @@
+package edp.davinci.service;
+
+import edp.davinci.model.QualityAuditor;
+import edp.davinci.model.QualityTask;
+
+import java.util.List;
+
+public interface QualityAuditorService
+{
+    List<QualityAuditor> getQualityAuditors();
+}

+ 14 - 0
server/src/main/java/edp/davinci/service/QualityTaskService.java

@@ -1,5 +1,19 @@
 package edp.davinci.service;
 
+import edp.core.exception.ServerException;
+import edp.davinci.model.QualityTask;
+
+import java.util.List;
+
 public interface QualityTaskService
 {
+    List<QualityTask> getQualityTask();
+
+    QualityTask createQualityTask(QualityTask qualityTask);
+
+    void updateQualityTask(QualityTask qualityTask);
+
+    void deleteQualityTask(Long id);
+
+    void auditor(Long id) throws ServerException;
 }

+ 8 - 0
server/src/main/java/edp/davinci/service/impl/CronJobServiceImpl.java

@@ -365,6 +365,14 @@ public class CronJobServiceImpl extends BaseEntityService implements CronJobServ
 							log.error(e.toString(), e);
 							scheduleLogger.error(e.getMessage());
 						}
+					}else if(jobType.equals("qualityAuditor")) {  // 质量稽核
+						try {
+							// 质量稽核
+							System.out.println("execute quality auditor");
+						} catch (Exception e) {
+							log.error(e.toString(), e);
+							scheduleLogger.error(e.getMessage());
+						}
 					}
 
 				} else {

+ 39 - 0
server/src/main/java/edp/davinci/service/impl/DataRulesServiceImpl.java

@@ -1,11 +1,50 @@
 package edp.davinci.service.impl;
 
+import edp.davinci.dao.DataRulesMapper;
+import edp.davinci.model.DataRules;
 import edp.davinci.service.DataRulesService;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 @Slf4j
 @Service("dataRulesService")
 public class DataRulesServiceImpl implements DataRulesService
 {
+    @Autowired
+    private DataRulesMapper dataRulesMapper;
+
+
+    @Override
+    public List<DataRules> getDataRules()
+    {
+        return dataRulesMapper.getDataRulesList();
+    }
+
+    @Override
+    public DataRules createDataRules(DataRules dataRules)
+    {
+        dataRulesMapper.insert(dataRules);
+        return dataRules;
+    }
+
+    @Override
+    public void updateDataRules(DataRules dataRules)
+    {
+        dataRulesMapper.update(dataRules);
+    }
+
+    @Override
+    public void deleteDataRules(Long id)
+    {
+        dataRulesMapper.deleteById(id);
+    }
+
+    @Override
+    public DataRules getDataRule(Long id)
+    {
+        return dataRulesMapper.getDataRule(id);
+    }
 }

+ 38 - 0
server/src/main/java/edp/davinci/service/impl/DataSubjectServiceImpl.java

@@ -1,12 +1,50 @@
 package edp.davinci.service.impl;
 
+import edp.davinci.dao.DataSubjectMapper;
+import edp.davinci.model.DataSubject;
 import edp.davinci.service.DataSubjectService;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 
 @Slf4j
 @Service("dataSubjectService")
 public class DataSubjectServiceImpl implements DataSubjectService
 {
+    @Autowired
+    private DataSubjectMapper dataSubjectMapper;
+
+    @Override
+    public DataSubject createDataSubject(DataSubject dataSubject)
+    {
+        dataSubjectMapper.insert(dataSubject);
+        return dataSubject;
+    }
+
+    @Override
+    public void updateDataSubject(DataSubject dataSubject)
+    {
+        dataSubjectMapper.update(dataSubject);
+    }
+
+    @Override
+    public List<DataSubject> getDataSubject()
+    {
+        return dataSubjectMapper.getDataSubjectList();
+    }
+
+    @Override
+    public void deleteDataSubject(Long id)
+    {
+        dataSubjectMapper.deleteById(id);
+    }
+
+    @Override
+    public DataSubject getOneDataSubject(Long id)
+    {
+        return dataSubjectMapper.getDataSubject(id);
+    }
 }

+ 25 - 0
server/src/main/java/edp/davinci/service/impl/QualityAuditorServiceImpl.java

@@ -0,0 +1,25 @@
+package edp.davinci.service.impl;
+
+import edp.davinci.dao.QualityAuditorMapper;
+import edp.davinci.model.QualityAuditor;
+import edp.davinci.service.QualityAuditorService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Slf4j
+@Service("qualityAuditorService")
+public class QualityAuditorServiceImpl implements QualityAuditorService
+{
+    @Autowired
+    private QualityAuditorMapper qualityAuditorMapper;
+
+
+    @Override
+    public List<QualityAuditor> getQualityAuditors()
+    {
+        return qualityAuditorMapper.getQualityAuditorList();
+    }
+}

+ 157 - 0
server/src/main/java/edp/davinci/service/impl/QualityTaskServiceImpl.java

@@ -1,12 +1,169 @@
 package edp.davinci.service.impl;
 
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import edp.core.exception.NotFoundException;
+import edp.core.exception.ServerException;
+import edp.core.utils.SqlUtils;
+import edp.davinci.dao.QualityAuditorMapper;
+import edp.davinci.dao.QualityTaskMapper;
+import edp.davinci.dao.SourceMapper;
+import edp.davinci.dao.ViewMapper;
+import edp.davinci.model.*;
+import edp.davinci.service.DataRulesService;
+import edp.davinci.service.DataSubjectService;
+import edp.davinci.service.QualityAuditorService;
 import edp.davinci.service.QualityTaskService;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
 
 @Slf4j
 @Service("qualityTaskService")
 public class QualityTaskServiceImpl implements QualityTaskService
 {
+    @Autowired
+    private QualityTaskMapper qualityTaskMapper;
+
+    @Autowired
+    private ViewMapper viewMapper;
+
+    @Autowired
+    private SourceMapper sourceMapper;
+
+    @Autowired
+    private DataSubjectService dataSubjectService;
+
+    @Autowired
+    private DataRulesService dataRulesService;
+
+    @Autowired
+    private QualityAuditorMapper qualityAuditorMapper;
+
+    @Autowired
+    private SqlUtils sqlUtils;
+
+    @Override
+    public List<QualityTask> getQualityTask()
+    {
+        return qualityTaskMapper.getQualityTaskList();
+    }
+
+    @Override
+    public QualityTask createQualityTask(QualityTask qualityTask)
+    {
+        qualityTaskMapper.insert(qualityTask);
+        return qualityTask;
+    }
+
+    @Override
+    public void updateQualityTask(QualityTask qualityTask)
+    {
+        qualityTaskMapper.update(qualityTask);
+    }
+
+    @Override
+    public void deleteQualityTask(Long id)
+    {
+        qualityTaskMapper.deleteById(id);
+    }
+
+    @Override
+    public void auditor(Long id) throws ServerException
+    {
+        QualityTask qualityTask = qualityTaskMapper.getQualityTask(id);
+
+        if (null == qualityTask)
+        {
+            throw new ServerException("qualityTask is null ");
+        }
+
+        String tableName = qualityTask.getMetadataName();
+        Long viewId = qualityTask.getViewId();
+        View view = viewMapper.getById(viewId);
+        String metadataConfig = qualityTask.getMetadataConfig();
+
+        JSONArray jsonArray = JSONObject.parseArray(metadataConfig);
+        // 遍历JSONArray
+        for (Iterator<Object> iterator = jsonArray.iterator(); iterator.hasNext(); )
+        {
+            JSONObject next = (JSONObject) iterator.next();
+            Long subjectId = next.getLong("subjectId");
+            String fieldName = next.getString("fieldName");
+
+            Source source = getSource(view.getSourceId());
+            SqlUtils sqlUtils = this.sqlUtils.init(source);
+
+            DataSubject dataSubject = dataSubjectService.getOneDataSubject(subjectId);
+            DataRules dataRules = dataRulesService.getDataRule(dataSubject.getId());
+            StringBuilder sql = new StringBuilder(view.getSql());
+            String inspectionType = dataRules.getInspectionType();
+            QualityAuditor qualityAuditor = new QualityAuditor();
+            qualityAuditor.setAuditorTime(new Date());
+
+            // 符合条件的
+            List<Map<String, Object>> result = sqlUtils.query4List(sql.toString(), -1);
+
+            if (dataRules.getRuleType().equalsIgnoreCase("not_null"))
+            {
+                // 非空
+
+            }
+            if (dataRules.getRuleType().equalsIgnoreCase("range"))
+            {
+                // 值域
+
+            }
+            if (dataRules.getRuleType().equalsIgnoreCase("length"))
+            {
+                // 长度
+
+            }
+            if (dataRules.getRuleType().equalsIgnoreCase("date_format"))
+            {
+                // 日期格式
+
+            }
+            if (inspectionType.equalsIgnoreCase(""))
+            { // 完整性
+
+                qualityAuditor.setIntegrityCorrect(1);
+                qualityAuditor.setIntegrityError(1);
+            }
+            if (inspectionType.equalsIgnoreCase(""))
+            { // 一致性
+                qualityAuditor.setUniformityCorrect(1);
+                qualityAuditor.setUniformityError(1);
+            }
+            if (inspectionType.equalsIgnoreCase(""))
+            { // 规范性
+                qualityAuditor.setNormativeCorrect(1);
+                qualityAuditor.setNormativeError(1);
+            }
+            if (inspectionType.equalsIgnoreCase(""))
+            { // 准确性
+                qualityAuditor.setAccuracyCorrect(1);
+                qualityAuditor.setAccuracyError(1);
+            }
+            qualityAuditorMapper.insert(qualityAuditor);
+        }
+    }
+
+    private Source getSource(Long id)
+    {
+        Source source = sourceMapper.getById(id);
+        if (null == source)
+        {
+            log.error("Source({}) not found", id);
+            throw new NotFoundException("Source is not found");
+        }
+        return source;
+    }
 }

+ 102 - 0
server/src/main/resources/mybatis/mapper/QualityAuditorMapper.xml

@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  ~ <<
+  ~  Davinci
+  ~  ==
+  ~  Copyright (C) 2016 - 2019 EDP
+  ~  ==
+  ~  Licensed under the Apache License, Version 2.0 (the "License");
+  ~  you may not use this file except in compliance with the License.
+  ~  You may obtain a copy of the License at
+  ~        http://www.apache.org/licenses/LICENSE-2.0
+  ~   Unless required by applicable law or agreed to in writing, software
+  ~   distributed under the License is distributed on an "AS IS" BASIS,
+  ~   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~   See the License for the specific language governing permissions and
+  ~   limitations under the License.
+  ~  >>
+  ~
+  -->
+
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="edp.davinci.dao.QualityAuditorMapper">
+    <insert id="insert" parameterType="edp.davinci.model.QualityAuditor">
+        insert into `quality_auditor`
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="auditorCode != null">
+                auditor_code,
+            </if>
+            <if test="auditorTime != null">
+                auditor_time,
+            </if>
+            <if test="taskId != null">
+                task_id,
+            </if>
+            <if test="integrityCorrect != null">
+                integrity_correct,
+            </if>
+            <if test="integrityError != null">
+                `integrity_error`,
+            </if>
+            <if test="uniformityCorrect != null">
+                `uniformity_correct`,
+            </if>
+            <if test="uniformityError != null">
+                `uniformity_error`,
+            </if>
+            <if test="normativeCorrect != null">
+                `normative_correct`,
+            </if>
+            <if test="normativeError != null">
+                `normative_error`,
+            </if>
+            <if test="accuracyCorrect != null">
+                `accuracy_correct`,
+            </if>
+            <if test="accuracyError != null">
+                `accuracy_error`,
+            </if>
+            `create_by`,
+            `create_time`
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="auditorCode != null">
+                #{auditorCode,jdbcType=VARCHAR},
+            </if>
+            <if test="auditorTime != null">
+                #{auditorTime,jdbcType=TIMESTAMP},
+            </if>
+            <if test="taskId != null">
+                #{taskId,jdbcType=BIGINT},
+            </if>
+            <if test="integrityCorrect != null">
+                #{integrityCorrect,jdbcType=INT},
+            </if>
+            <if test="integrityError != null">
+                #{integrityError,jdbcType=INT},
+            </if>
+            <if test="uniformityCorrect != null">
+                #{uniformityCorrect,jdbcType=INT},
+            </if>
+            <if test="uniformityError != null">
+                #{uniformityError,jdbcType=INT},
+            </if>
+            <if test="normativeCorrect != null">
+                #{normativeCorrect,jdbcType=INT},
+            </if>
+            <if test="normativeError != null">
+                #{normativeError,jdbcType=INT},
+            </if>
+            <if test="accuracyCorrect != null">
+                #{accuracyCorrect,jdbcType=INT},
+            </if>
+            <if test="accuracyError != null">
+                #{accuracyError,jdbcType=INT},
+            </if>
+            #{createBy,jdbcType=BIGINT},
+            #{createTime,jdbcType=TIMESTAMP}
+        </trim>
+    </insert>
+
+
+</mapper>