Forráskód Böngészése

重构考试课程代码,优化查询效率

宋悦 7 éve
szülő
commit
740f8f1146

+ 15 - 96
exam-work-api/src/main/java/cn/com/qmth/examcloud/service/examwork/api/ExamCourseApi.java

@@ -1,27 +1,13 @@
 package cn.com.qmth.examcloud.service.examwork.api;
 
-import cn.com.qmth.examcloud.common.dto.core.Course;
-import cn.com.qmth.examcloud.service.examwork.dao.ExamRepo;
-import cn.com.qmth.examcloud.service.examwork.dao.ExamStudentRepo;
+import cn.com.qmth.examcloud.service.examwork.criteria.ExamCourseCriteria;
 import cn.com.qmth.examcloud.service.examwork.dto.ExamCourseDTO;
-import cn.com.qmth.examcloud.service.examwork.entity.Exam;
-import cn.com.qmth.examcloud.service.examwork.entity.ExamStudent;
-import cn.com.qmth.examcloud.service.examwork.service.rpc.CourseService;
-import cn.com.qmth.examcloud.service.examwork.service.rpc.client.CourseClient;
+import cn.com.qmth.examcloud.service.examwork.service.ExamCourseService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageImpl;
-import org.springframework.data.domain.PageRequest;
-import org.springframework.util.StringUtils;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
 
 /**
  * Created by yuanpan on 2017/4/12.
@@ -31,91 +17,24 @@ import java.util.stream.Collectors;
 public class ExamCourseApi {
 
     @Autowired
-    ExamStudentRepo examStudentRepo;
-
-    @Autowired
-    CourseService courseService;
-
-    @Autowired
-    ExamRepo examRepo;
+    private ExamCourseService examCourseService;
 
 
     @GetMapping
-    public Page<ExamCourseDTO> findCourse(@RequestParam("exam_id") Long examId,
-                                          @RequestParam(value = "course_code", required = false) String courseCode,
-                                          @RequestParam(value = "course_level", required = false) String courseLevel,
-                                          @RequestParam("cur_page") Integer curPage,
-                                          @RequestParam("page_size") Integer pageSize) {
-
-
-        List<ExamStudent> examStudents;
-        if (!StringUtils.isEmpty(courseCode)) {
-            examStudents = examStudentRepo.findDistinctCourseCode(examId, courseCode);
-        } else {
-            examStudents = examStudentRepo.findDistinctCourseCode(examId);
-        }
-        Map<String, Course> courseMap = getCourseMap(examId);
-
-        List<ExamCourseDTO> examCourseDTOs = examStudents.stream().map(examStudent -> {
-            ExamCourseDTO examCourseDTO = new ExamCourseDTO();
-            examCourseDTO.setExamId(examId);
-            examCourseDTO.setExamName(examStudent.getExam().getName());
-            examCourseDTO.setExamType(examStudent.getExam().getExamType());
-            examCourseDTO.setCourseName(examStudent.getCourseName());
-            examCourseDTO.setCourseCode(examStudent.getCourseCode());
-            examCourseDTO.setOrgId(examStudent.getRootOrgId());
-            return examCourseDTO;
-        }).filter(examCourseDTO -> {
-            Course course = courseMap.get(examCourseDTO.getCourseCode());
-            return course.getEnable() != null ? course.getEnable() : false;
-        }).filter(examCourseDTO -> {
-            if(!StringUtils.isEmpty(courseLevel)){
-                Course course = courseMap.get(examCourseDTO.getCourseCode());
-                return courseLevel.equals(course.getLevel().name());
-            }else{
-                return true;
-            }
-        }).collect(Collectors.toList());
-        int total = examCourseDTOs.size();
-        examCourseDTOs = examCourseDTOs.stream().skip(curPage * pageSize).limit(pageSize).collect(Collectors.toList());
-        return new PageImpl<ExamCourseDTO>(examCourseDTOs, new PageRequest(curPage, pageSize), total);
-
+    public Page<ExamCourseDTO> findAllPage(@RequestParam("exam_id") Long examId,
+                                           @RequestParam(value = "course_code",required = false) String courseCode,
+                                           @RequestParam(value = "course_level",required = false) String courseLevel,
+                                           @RequestParam("cur_page") Integer curPage,
+                                           @RequestParam("page_size") Integer pageSize) {
+        ExamCourseCriteria courseCriteria = new ExamCourseCriteria(examId,courseCode,courseLevel,curPage,pageSize);
+        Page<ExamCourseDTO> examCourseDTOs = examCourseService.findAllPage(courseCriteria);
+        return examCourseDTOs;
     }
 
     @GetMapping("/marking")
-    public List<ExamCourseDTO> findCourse(@RequestParam(value = "exam_id", required = true) Long examId) {
-
-        List<ExamStudent> examStudents = examStudentRepo.findDistinctCourseCode(examId);
-
-        Map<String, Course> courseMap = getCourseMap(examId);
-
-        List<ExamCourseDTO> examCourseDTOs = examStudents.stream().map(examStudent -> {
-            ExamCourseDTO examCourseDTO = new ExamCourseDTO();
-            examCourseDTO.setExamId(examId);
-            examCourseDTO.setExamName(examStudent.getExam().getName());
-            examCourseDTO.setExamType(examStudent.getExam().getExamType());
-            examCourseDTO.setCourseName(examStudent.getCourseName());
-            examCourseDTO.setCourseCode(examStudent.getCourseCode());
-            examCourseDTO.setOrgId(examStudent.getRootOrgId());
-            return examCourseDTO;
-        }).filter(examCourseDTO -> {
-            Course course = courseMap.get(examCourseDTO.getCourseCode());
-            return course.getEnable() != null ? course.getEnable() : false;
-        }).collect(Collectors.toList());
+    public List<ExamCourseDTO> findAll(@RequestParam("exam_id") Long examId) {
+        ExamCourseCriteria courseCriteria = new ExamCourseCriteria(examId);
+        List<ExamCourseDTO> examCourseDTOs = examCourseService.findAll(courseCriteria);
         return examCourseDTOs;
-
-    }
-
-    private Map<String, Course> getCourseMap(Long examId) {
-        Map<String, Course> courseMap = new HashMap<>();
-        Exam exam = examRepo.findOne(examId);
-        List<Course> courses = courseService.findByOrgId(exam.getRootOrgId());
-        if(courses != null && courses.size() > 0){
-            for(Course course:courses){
-                courseMap.put(course.getCode(),course);
-            }
-        }
-        return courseMap;
     }
-
 }

+ 3 - 10
exam-work-api/src/main/java/cn/com/qmth/examcloud/service/examwork/api/ExamStudentApi.java

@@ -5,13 +5,11 @@ import cn.com.qmth.examcloud.common.dto.examwork.CommonExamStudent;
 import cn.com.qmth.examcloud.common.uac.entity.AccessUser;
 import cn.com.qmth.examcloud.service.examwork.dao.ExamRepo;
 import cn.com.qmth.examcloud.service.examwork.entity.Exam;
-import cn.com.qmth.examcloud.service.examwork.service.rpc.OeService;
 import cn.com.qmth.examcloud.service.examwork.util.ImportUtils;
 import io.swagger.annotations.ApiOperation;
 
 import java.io.File;
 import java.io.FileInputStream;
-import java.io.IOException;
 import java.math.BigInteger;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -20,10 +18,7 @@ import java.util.Map;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
-import javax.persistence.criteria.CriteriaBuilder;
-import javax.persistence.criteria.CriteriaQuery;
 import javax.persistence.criteria.Predicate;
-import javax.persistence.criteria.Root;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
@@ -35,7 +30,6 @@ import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageRequest;
 import org.springframework.data.domain.Sort;
 import org.springframework.data.domain.Sort.Direction;
-import org.springframework.data.jpa.domain.Specification;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.DeleteMapping;
@@ -48,14 +42,13 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
-import org.springframework.web.multipart.MultipartFile;
 
 import cn.com.qmth.examcloud.common.util.ErrorMsg;
 import cn.com.qmth.examcloud.common.util.excel.ExcelError;
 import cn.com.qmth.examcloud.service.examwork.assembler.ExamStudentAssembler;
 import cn.com.qmth.examcloud.service.examwork.dao.ExamStudentRepo;
 import cn.com.qmth.examcloud.service.examwork.dto.ExamStudentDTO;
-import cn.com.qmth.examcloud.service.examwork.dto.OrgExamInfo;
+import cn.com.qmth.examcloud.service.examwork.dto.OrgExamInfoDTO;
 import cn.com.qmth.examcloud.service.examwork.entity.ExamStudent;
 import cn.com.qmth.examcloud.service.examwork.service.ExamStudentService;
 import cn.com.qmth.examcloud.service.examwork.util.ExportUtils;
@@ -382,8 +375,8 @@ public class ExamStudentApi {
     @GetMapping("/findOrgExamInfos")
     public ResponseEntity<Object> findOrgExamInfos(String examId,String orgCode){
     	try{
-    		List<OrgExamInfo> orgExamInfos = examStudentService.findOrgExamInfos(examId, orgCode);
-    		return new ResponseEntity<Object>(orgExamInfos,HttpStatus.OK);
+    		List<OrgExamInfoDTO> orgExamInfoDTOs = examStudentService.findOrgExamInfos(examId, orgCode);
+    		return new ResponseEntity<Object>(orgExamInfoDTOs,HttpStatus.OK);
     	} catch (Exception e) {
             e.printStackTrace();
             return new ResponseEntity(new ErrorMsg(e.getMessage()), HttpStatus.INTERNAL_SERVER_ERROR);

+ 107 - 0
exam-work-api/src/main/java/cn/com/qmth/examcloud/service/examwork/service/ExamCourseService.java

@@ -0,0 +1,107 @@
+package cn.com.qmth.examcloud.service.examwork.service;
+
+import cn.com.qmth.examcloud.service.examwork.criteria.ExamCourseCriteria;
+import cn.com.qmth.examcloud.service.examwork.dto.ExamCourseDTO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageImpl;
+import org.springframework.jdbc.core.BeanPropertyRowMapper;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * Created by songyue on 18/4/2.
+ */
+@Service
+public class ExamCourseService {
+
+    @Autowired
+    private JdbcTemplate jdbcTemplate;
+
+    @Autowired
+    private NamedParameterJdbcTemplate namedParameterJdbcTemplate;
+
+    public Page<ExamCourseDTO> findAllPage(ExamCourseCriteria examCourseCriteria){
+        StringBuilder sql = new StringBuilder();
+        sql.append(buildBaseSql());
+        sql.append(buildCriteriaSql(examCourseCriteria));
+        sql.append(buildGroupSql());
+        sql.append(buildPageSql(examCourseCriteria));
+        BeanPropertyRowMapper mapper = new BeanPropertyRowMapper<>(ExamCourseDTO.class);
+        List<ExamCourseDTO> projectStatDTOs = this.namedParameterJdbcTemplate.query(sql.toString(), mapper);
+        long total = countAll(examCourseCriteria);
+        return new PageImpl<ExamCourseDTO>(projectStatDTOs,examCourseCriteria.getPageable(),total);
+
+    }
+
+    public List<ExamCourseDTO> findAll(ExamCourseCriteria examCourseCriteria){
+        StringBuilder sql = new StringBuilder();
+        sql.append(buildBaseSql());
+        sql.append(buildCriteriaSql(examCourseCriteria));
+        sql.append(buildGroupSql());
+        BeanPropertyRowMapper mapper = new BeanPropertyRowMapper<>(ExamCourseDTO.class);
+        List<ExamCourseDTO> projectStatDTOs = this.namedParameterJdbcTemplate.query(sql.toString(), mapper);
+        return projectStatDTOs;
+    }
+
+    private long countAll(ExamCourseCriteria examCourseCriteria){
+        StringBuffer sql = new StringBuffer();
+        sql.append(buildCountSql());
+        sql.append(buildCriteriaSql(examCourseCriteria));
+        return this.jdbcTemplate.queryForObject(sql.toString(),Long.class);
+    }
+
+    private String buildPageSql(ExamCourseCriteria examCourseCriteria){
+        StringBuilder pageSql = new StringBuilder();
+        int currentNum = examCourseCriteria.getCurPage() * examCourseCriteria.getPageSize();
+        pageSql.append(" limit "+currentNum+","+examCourseCriteria.getPageSize());
+        return pageSql.toString();
+    }
+
+    private String buildCriteriaSql(ExamCourseCriteria examCourseCriteria){
+        StringBuilder criteriaSql = new StringBuilder();
+        if(examCourseCriteria.getExamId() != null){
+            criteriaSql.append(" and exam_id ="+examCourseCriteria.getExamId());
+        }
+        if(examCourseCriteria.getCourseCode() != null){
+            criteriaSql.append(" and course_code ='"+examCourseCriteria.getCourseCode()+"'");
+        }
+        if(examCourseCriteria.getCourseLevel() != null){
+            criteriaSql.append(" and course_level ='"+examCourseCriteria.getCourseLevel()+"'");
+        }
+        criteriaSql.append(" and exists (select 1 from ecs_core_course tc where tc.org_id = ts.root_org_id" +
+                                        " and tc.code = ts.course_code" +
+                                        " and tc.enable = 1)");
+        return criteriaSql.toString();
+    }
+
+    private String buildGroupSql(){
+        return " group by ts.course_code order by ts.course_code";
+    }
+
+    private String buildBaseSql(){
+        StringBuilder baseSql = new StringBuilder();
+        baseSql.append("select" +
+                        " ts.exam_id as exam_id," +
+                        " te.name as exam_name," +
+                        " te.exam_type as exam_type," +
+                        " ts.course_code as course_code," +
+                        " ts.course_name as course_name," +
+                        " ts.root_org_id as org_id" +
+                        " from" +
+                        " ecs_exam_student ts," +
+                        " ecs_exam te" +
+                        " where ts.exam_id = te.id");
+        return baseSql.toString();
+    }
+
+    private String buildCountSql(){
+        StringBuilder countSql = new StringBuilder();
+        countSql.append("select count(*) from ecs_exam_student ts,ecs_exam te where ts.exam_id = te.id");
+        return countSql.toString();
+    }
+
+}

+ 15 - 19
exam-work-api/src/main/java/cn/com/qmth/examcloud/service/examwork/service/ExamStudentService.java

@@ -11,7 +11,6 @@ import java.util.List;
 import javax.persistence.criteria.Predicate;
 
 import cn.com.qmth.examcloud.common.util.BeanCopierUtil;
-import cn.com.qmth.examcloud.common.util.DateFormat;
 import cn.com.qmth.examcloud.service.examwork.dao.ExamOrgTimeRepo;
 import cn.com.qmth.examcloud.service.examwork.entity.ExamOrgTime;
 import cn.com.qmth.examcloud.service.examwork.enums.ExamType;
@@ -21,7 +20,6 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageImpl;
-import org.springframework.data.domain.PageRequest;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.domain.Sort;
 import org.springframework.data.domain.Sort.Direction;
@@ -29,9 +27,7 @@ import org.springframework.data.jpa.domain.Specification;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.jdbc.core.RowMapper;
 import org.springframework.stereotype.Service;
-import org.springframework.util.MultiValueMap;
 import org.springframework.util.StringUtils;
-import org.springframework.web.bind.annotation.RequestBody;
 
 import cn.com.qmth.examcloud.common.dto.core.Course;
 import cn.com.qmth.examcloud.common.dto.core.Org;
@@ -47,7 +43,7 @@ import cn.com.qmth.examcloud.service.examwork.assembler.ExamStudentAssembler;
 import cn.com.qmth.examcloud.service.examwork.dao.ExamRepo;
 import cn.com.qmth.examcloud.service.examwork.dao.ExamStudentRepo;
 import cn.com.qmth.examcloud.service.examwork.dto.ExamStudentDTO;
-import cn.com.qmth.examcloud.service.examwork.dto.OrgExamInfo;
+import cn.com.qmth.examcloud.service.examwork.dto.OrgExamInfoDTO;
 import cn.com.qmth.examcloud.service.examwork.entity.Exam;
 import cn.com.qmth.examcloud.service.examwork.entity.ExamStudent;
 import cn.com.qmth.examcloud.service.examwork.service.rpc.CourseService;
@@ -690,7 +686,7 @@ public class ExamStudentService {
 	 * @param orgCode
 	 * @return
 	 */
-	public List<OrgExamInfo> findOrgExamInfos(String examId,String orgCode){
+	public List<OrgExamInfoDTO> findOrgExamInfos(String examId, String orgCode){
 		if(!StringUtils.hasLength(examId)){
 			return null;
 		}
@@ -706,23 +702,23 @@ public class ExamStudentService {
 			sql.append(" and t.org_code = '"+orgCode+"'");
 		}
 		sql.append(" group by t.org_id, t.org_name order by t.org_id");
-		return jdbcTemplate.query(sql.toString(),new Object[]{examId}, new RowMapper<OrgExamInfo>(){
+		return jdbcTemplate.query(sql.toString(),new Object[]{examId}, new RowMapper<OrgExamInfoDTO>(){
 			@Override
-			public OrgExamInfo mapRow(ResultSet rs, int rowNum)throws SQLException {
-				OrgExamInfo orgExamInfo = new OrgExamInfo();
-				orgExamInfo.setOrgId(rs.getLong("orgid")+"");
-				orgExamInfo.setOrgCode(rs.getString("orgcode"));
-				orgExamInfo.setOrgName(rs.getString("orgname"));
-				orgExamInfo.setAllNum(rs.getInt("allNum"));
-				orgExamInfo.setCompletedNum(rs.getInt("completedNum"));
-				if(orgExamInfo.getCompletedNum()==0){
-					orgExamInfo.setProportion("0");
+			public OrgExamInfoDTO mapRow(ResultSet rs, int rowNum)throws SQLException {
+				OrgExamInfoDTO orgExamInfoDTO = new OrgExamInfoDTO();
+				orgExamInfoDTO.setOrgId(rs.getLong("orgid")+"");
+				orgExamInfoDTO.setOrgCode(rs.getString("orgcode"));
+				orgExamInfoDTO.setOrgName(rs.getString("orgname"));
+				orgExamInfoDTO.setAllNum(rs.getInt("allNum"));
+				orgExamInfoDTO.setCompletedNum(rs.getInt("completedNum"));
+				if(orgExamInfoDTO.getCompletedNum()==0){
+					orgExamInfoDTO.setProportion("0");
 				}else{
 					DecimalFormat df = new DecimalFormat("#.00");
-					double proportion = (double)orgExamInfo.getCompletedNum()/orgExamInfo.getAllNum();
-					orgExamInfo.setProportion(df.format(proportion*100));
+					double proportion = (double) orgExamInfoDTO.getCompletedNum()/ orgExamInfoDTO.getAllNum();
+					orgExamInfoDTO.setProportion(df.format(proportion*100));
 				}
-				return orgExamInfo;
+				return orgExamInfoDTO;
 			}
 		});
 	}

+ 43 - 0
exam-work-domain/src/main/java/cn/com/qmth/examcloud/service/examwork/criteria/BasePageable.java

@@ -0,0 +1,43 @@
+package cn.com.qmth.examcloud.service.examwork.criteria;
+
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
+
+import java.io.Serializable;
+
+/**
+ * Created by songyue on 18/4/2.
+ */
+public abstract class BasePageable implements Serializable{
+
+    private static final long serialVersionUID = -183445483309358532L;
+
+    protected Integer curPage;
+
+    protected Integer pageSize;
+
+    public Integer getCurPage() {
+        return curPage;
+    }
+
+    public void setCurPage(Integer curPage) {
+        this.curPage = curPage;
+    }
+
+    public Integer getPageSize() {
+        return pageSize;
+    }
+
+    public void setPageSize(Integer pageSize) {
+        this.pageSize = pageSize;
+    }
+
+    public BasePageable() {
+        this.curPage = 0;
+        this.pageSize = 10;
+    }
+
+    public Pageable getPageable(){
+        return new PageRequest(this.curPage,this.pageSize);
+    }
+}

+ 78 - 0
exam-work-domain/src/main/java/cn/com/qmth/examcloud/service/examwork/criteria/ExamCourseCriteria.java

@@ -0,0 +1,78 @@
+package cn.com.qmth.examcloud.service.examwork.criteria;
+
+
+/**
+ * Created by songyue on 18/4/2.
+ */
+public class ExamCourseCriteria extends BasePageable{
+
+    private Long examId;
+
+    private String courseCode;
+
+    private String courseLevel;
+
+    private Long orgId;
+
+    public Long getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Long examId) {
+        this.examId = examId;
+    }
+
+    public String getCourseCode() {
+        return courseCode;
+    }
+
+    public void setCourseCode(String courseCode) {
+        this.courseCode = courseCode;
+    }
+
+    public String getCourseLevel() {
+        return courseLevel;
+    }
+
+    public void setCourseLevel(String courseLevel) {
+        this.courseLevel = courseLevel;
+    }
+
+    public Long getOrgId() {
+        return orgId;
+    }
+
+    public void setOrgId(Long orgId) {
+        this.orgId = orgId;
+    }
+
+    public ExamCourseCriteria(Long examId,
+                              String courseCode,
+                              String courseLevel,
+                              int curPage,
+                              int pageSize) {
+        this.examId = examId;
+        this.courseCode = courseCode;
+        this.courseLevel = courseLevel;
+        this.curPage = curPage;
+        this.pageSize = pageSize;
+    }
+
+    public ExamCourseCriteria(Long examId) {
+        this.examId = examId;
+    }
+
+    public ExamCourseCriteria(){
+
+    }
+
+    @Override
+    public String toString() {
+        return "ExamCourseCriteria{" +
+                "examId=" + examId +
+                ", courseCode='" + courseCode + '\'' +
+                ", courseLevel='" + courseLevel + '\'' +
+                ", orgId=" + orgId +
+                '}';
+    }
+}

+ 1 - 1
exam-work-domain/src/main/java/cn/com/qmth/examcloud/service/examwork/dto/OrgExamInfo.java → exam-work-domain/src/main/java/cn/com/qmth/examcloud/service/examwork/dto/OrgExamInfoDTO.java

@@ -8,7 +8,7 @@ import java.io.Serializable;
  * @company 	QMTH
  * @description OrgExamIndo.java
  */
-public class OrgExamInfo implements Serializable{
+public class OrgExamInfoDTO implements Serializable{
 
 	/**
 	 * 

+ 13 - 0
exam-work-domain/src/main/java/cn/com/qmth/examcloud/service/examwork/entity/ExamStudent.java

@@ -152,6 +152,11 @@ public class ExamStudent implements Serializable {
 	 * 是否可上传
      */
 	private Boolean canUpload;
+
+	/**
+	 * 试卷袋编码
+     */
+	private String packageCode;
 	
 	public static long getSerialVersionUID() {
 		return serialVersionUID;
@@ -446,4 +451,12 @@ public class ExamStudent implements Serializable {
 	public void setCanUpload(Boolean canUpload) {
 		this.canUpload = canUpload;
 	}
+
+	public String getPackageCode() {
+		return packageCode;
+	}
+
+	public void setPackageCode(String packageCode) {
+		this.packageCode = packageCode;
+	}
 }