Explorar o código

评估和会计功能提交

徐滕 hai 1 semana
pai
achega
5d11239f46
Modificáronse 21 ficheiros con 218 adicións e 11 borrados
  1. 8 0
      jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/invoice/mapper/FinanceInvoiceMapper.java
  2. 16 0
      jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/invoice/mapper/xml/FinanceInvoiceMapper.xml
  3. 9 0
      jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/invoice/service/FinanceInvoiceService.java
  4. 60 5
      jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/program/configuration/projectList/controller/ProjectListController.java
  5. 3 0
      jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/program/configuration/projectList/mapper/xml/ProjectListMapper.xml
  6. 7 1
      jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/program/configuration/projectList/service/ProjectListService.java
  7. 13 0
      jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/program/configuration/projectList/service/dto/ExportFileDto.java
  8. 19 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectRecords/controller/CwProjectRecordsController.java
  9. 5 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectRecords/domain/CwProjectRecords.java
  10. 2 1
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectRecords/mapper/xml/CwProjectRecordsMapper.xml
  11. 3 1
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectRecords/service/CwProjectRecordsService.java
  12. 11 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectRecords/service/dto/CwProjectRecordsDTO.java
  13. 17 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/controller/CwProjectReportController.java
  14. 7 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/domain/CwProjectReportData.java
  15. 1 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/mapper/xml/CwProjectReportMapper.xml
  16. 4 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/service/CwProjectReportService.java
  17. 17 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReportArchive/controller/CwProjectReportArchiveController.java
  18. 2 2
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReportArchive/mapper/xml/CwProjectReportArchiveApplyMapper.xml
  19. 3 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReportArchive/mapper/xml/CwProjectReportArchiveMapper.xml
  20. 1 1
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReportArchive/service/CwProjectReportArchiveApplyService.java
  21. 10 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReportArchive/service/dto/CwProjectReportArchiveDTO.java

+ 8 - 0
jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/invoice/mapper/FinanceInvoiceMapper.java

@@ -79,6 +79,14 @@ public interface FinanceInvoiceMapper extends BaseMapper<FinanceInvoice> {
      * @return
      */
     Integer updateRedInvoiceJsonByWorkInvoiceId(FinanceInvoiceDTO workInvoice);
+
+
+    /**
+     * 根据项目id查询发票信息
+     * @param programIdList
+     * @return
+     */
+    List<FinanceInvoiceDTO> getFinanceInvoiceByProgramId(@Param("programIdList") List<String> programIdList);
 }
 
 

+ 16 - 0
jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/invoice/mapper/xml/FinanceInvoiceMapper.xml

@@ -499,4 +499,20 @@
         </set>
         WHERE id = #{id}
     </update>
+
+
+    <select id="getFinanceInvoiceByProgramId" resultType="com.jeeplus.assess.invoice.service.dto.FinanceInvoiceDTO">
+        select b.program_id as "programId",a.number as "number" from finance_invoice_detail a
+        left join finance_invoice_base b on a.invoice_id = b.invoice_id and b.del_flag = 0
+        <where>
+            a. del_flag = 0
+
+            <if test="programIdList != null">
+                AND b.program_id IN
+                <foreach collection="programIdList" item="item" index="index" open="(" close=")" separator=",">
+                    #{item}
+                </foreach>
+            </if>
+        </where>
+    </select>
 </mapper>

+ 9 - 0
jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/invoice/service/FinanceInvoiceService.java

@@ -1379,4 +1379,13 @@ public class FinanceInvoiceService extends ServiceImpl<FinanceInvoiceMapper, Fin
     public  void updateOmsUrlById(FinanceInvoiceDTO workInvoice){
         financeInvoiceMapper.updateOmsUrlById(workInvoice);
     }
+
+
+    /**
+     * 根据项目id集合查询相关的所有的发票信息
+     * @return
+     */
+    public List<FinanceInvoiceDTO> getFinanceInvoiceByProgramId(List<String> programIdList) {
+        return financeInvoiceMapper.getFinanceInvoiceByProgramId(programIdList);
+    }
 }

+ 60 - 5
jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/program/configuration/projectList/controller/ProjectListController.java

@@ -3,6 +3,7 @@ package com.jeeplus.assess.program.configuration.projectList.controller;
 import cn.hutool.extra.spring.SpringUtil;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.jeeplus.aop.demo.annotation.DemoMode;
 import com.jeeplus.assess.invoice.service.FinanceInvoiceService;
@@ -33,10 +34,7 @@ import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
 import java.io.File;
 import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
 import java.util.stream.Collectors;
 
 @Api(tags ="项目列表管理")
@@ -321,12 +319,43 @@ public class ProjectListController {
             result = projectListService.list (page,info,"1").getRecords();
         }
 
+        Iterator<ProgramProjectListInfo> iterator = result.iterator();
+        while (iterator.hasNext()) {
+            ProgramProjectListInfo listInfo = iterator.next();
+            if ("5".equals(listInfo.getCancellationStatus())) {
+                iterator.remove(); // 安全删除,不会报错
+            }
+        }
+
         List<ExportFileDto> exportFileDtos = projectListService.exportList(result);
 
         Page<FinanceInvoiceDTO> invoicePage = new Page<>();
         invoicePage.setCurrent(1);
         invoicePage.setSize(999);
+        //此处应该是遍历所有项目中对应的项目id。然后批量去进行查询,再分组,最后整合填写
+        List<String> programIdList = new ArrayList<>();
         for (ExportFileDto exportFileDto : exportFileDtos) {
+            programIdList.add(exportFileDto.getId());
+        }
+        if(!programIdList.isEmpty()){
+            List<FinanceInvoiceDTO> financeInvoiceList = financeInvoiceService.getFinanceInvoiceByProgramId(programIdList);
+            //如果查出来的发票信息数量正常,则对其根据项目id进行分组,分组完再将其遍历处理存放到对应的数据中
+            Map<String, List<FinanceInvoiceDTO>> stringListMap = this.dataMessageDisposeByProgramId(financeInvoiceList);
+
+            for (ExportFileDto exportFileDto : exportFileDtos) {
+                List<FinanceInvoiceDTO> invoiceList = stringListMap.get(exportFileDto.getId());
+                if (CollectionUtils.isNotEmpty(invoiceList)) {
+                    String invoiceNums = invoiceList.stream()
+                            .map(FinanceInvoiceDTO::getNumber)
+                            .filter(Objects::nonNull) // 💡 避免 null
+                            .collect(Collectors.joining(","));
+
+                    exportFileDto.setInvoiceNums(invoiceNums);
+                }
+            }
+        }
+
+        /*for (ExportFileDto exportFileDto : exportFileDtos) {
             FinanceInvoiceDTO financeInvoiceDTO = new FinanceInvoiceDTO();
             financeInvoiceDTO.setProgramName(exportFileDto.getName());
             IPage<FinanceInvoiceDTO> invoiceList = financeInvoiceService.findList(invoicePage, financeInvoiceDTO);
@@ -337,12 +366,38 @@ public class ProjectListController {
                     .collect(Collectors.joining(","));
 
             exportFileDto.setInvoiceNums(invoiceNums);
-        }
+        }*/
 
         EasyPoiUtil.exportExcel ( exportFileDtos, sheetName,  sheetName, ExportFileDto.class, fileName, response );
 
     }
 
+    /**
+     * 分组(根据项目名称)
+     *
+     * @param list
+     * @return
+     */
+    private Map<String, List<FinanceInvoiceDTO>> dataMessageDisposeByProgramId(List<FinanceInvoiceDTO> list) {
+        Map<String, List<FinanceInvoiceDTO>> infoMap = new HashMap<>();
+        if (CollectionUtils.isNotEmpty(list)) {
+            // 分组
+            for (FinanceInvoiceDTO vo : list) {
+                List<FinanceInvoiceDTO> tempList = infoMap.get(vo.getProgramId());
+                /*如果取不到数据,那么直接new一个空的ArrayList**/
+                if (tempList == null) {
+                    tempList = new ArrayList<>();
+                    tempList.add(vo);
+                    infoMap.put(vo.getProgramId(), tempList);
+                } else {
+                    /*某个vo之前已经存放过了,则直接追加数据到原来的List里**/
+                    tempList.add(vo);
+                }
+            }
+        }
+        return infoMap;
+    }
+
 
 
 

+ 3 - 0
jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/program/configuration/projectList/mapper/xml/ProjectListMapper.xml

@@ -614,6 +614,7 @@
             (SELECT
                 b.`year`,
                 d.`name` AS client_name,
+                a.`id`,
                 a.`name`,
                 a.assessment_objective,
                 a.assessment_object,
@@ -635,6 +636,7 @@
                 b.forensics,
                 b.report_charges,
                 i.name as current_dispose_person,
+                IFNULL(pc.STATUS, 0) AS cancellationStatus,
                 (CASE b.is_invoice WHEN 0 THEN "否" WHEN 1 THEN "是" ELSE "" END) AS is_invoice,
                 DATE_FORMAT(b.invoice_date,'%Y-%m-%d') AS invoice_date,
                 (CASE b.is_contract_archive WHEN 0 THEN "否" WHEN 1 THEN "是" ELSE "" END) AS is_contract_archive,
@@ -650,6 +652,7 @@
                 LEFT JOIN sys_user i ON b.current_dispose_person = i.id
                 LEFT JOIN sys_user g ON b.signature_evaluator_first = g.id
                 LEFT JOIN sys_user h ON b.signature_evaluator_second = h.id
+                left join program_cancellation pc on pc.project_id = a.id and pc.del_flag = '0'
             WHERE a.del_flag = 0
             <if test="infoList != null">
                 AND a.id IN

+ 7 - 1
jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/program/configuration/projectList/service/ProjectListService.java

@@ -930,7 +930,13 @@ public class ProjectListService {
         }
 
         if (StringUtils.isNotBlank(info.getCancellationStatus())){
-            wrapper.eq("pc.status", info.getCancellationStatus());
+            if ("0".equals(info.getCancellationStatus())) {
+                // 状态0:pc表无数据(不存在注销记录)
+                wrapper.notExists("SELECT 1 FROM program_cancellation pc WHERE pc.project_id = a.id AND pc.del_flag = '0'");
+            } else {
+                // 非0:正常匹配 pc.status
+                wrapper.eq("pc.status", info.getCancellationStatus());
+            }
         }
 
         /*//获取当前登录人信息

+ 13 - 0
jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/program/configuration/projectList/service/dto/ExportFileDto.java

@@ -186,4 +186,17 @@ public class ExportFileDto {
     @Excel(name = "底稿是否归档", width = 20, orderNum = "26")
     private String isPapersArchive;
 
+    /**
+     * 项目类型(归档表)
+     */
+    @Excel(name = "项目作废", width = 20, dict = "program_cancellation", orderNum = "27")
+    private String cancellationStatus;
+
+
+
+    /**
+     * 项目id
+     */
+    private String id;
+
 }

+ 19 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectRecords/controller/CwProjectRecordsController.java

@@ -97,6 +97,25 @@ public class CwProjectRecordsController {
     public ResponseEntity<IPage<CwProjectRecordsDTO>> data(CwProjectRecordsDTO cwProjectRecordsDTO, Page<CwProjectRecordsDTO> page) throws Exception {
         IPage<CwProjectRecordsDTO> result = new Page<CwProjectRecordsDTO>();
         result = cwProjectRecordsService.findList (page,cwProjectRecordsDTO);
+        for (CwProjectRecordsDTO record : result.getRecords()) {
+            List<String> operatorList = new ArrayList<>();
+
+            // 依次判断三个字段,非空才加入列表
+            if (StringUtils.isNotBlank(record.getProjectExecutor())) {
+                operatorList.add(record.getProjectExecutor());
+            }
+            if (StringUtils.isNotBlank(record.getProjectMasterId())) {
+                operatorList.add(record.getProjectMasterId());
+            }
+            if (StringUtils.isNotBlank(record.getProjectLeaderId())) {
+                operatorList.add(record.getProjectLeaderId());
+            }
+
+            // 用逗号拼接,空列表会自动返回空字符串,完美符合需求
+            String projectOperators = String.join(",", operatorList);
+            record.setProjectOperators(projectOperators);
+        }
+
         return ResponseEntity.ok (result);
     }
 

+ 5 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectRecords/domain/CwProjectRecords.java

@@ -66,6 +66,11 @@ public class CwProjectRecords extends BaseEntity {
     private String projectMasterId;
 
     /**
+     * 项目实际执行人
+     */
+    private String projectExecutor;
+
+    /**
      * 现场负责人
      */
     private String projectLeaderId;

+ 2 - 1
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectRecords/mapper/xml/CwProjectRecordsMapper.xml

@@ -93,7 +93,8 @@
         a.project_classification,
         a.report_review,
         a.is_have_report,
-        a.is_pre_invoice
+        a.is_pre_invoice,
+        a.project_executor
     </sql>
     <sql id="File_Column_List">
         wa.id,

+ 3 - 1
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectRecords/service/CwProjectRecordsService.java

@@ -252,7 +252,9 @@ public class CwProjectRecordsService extends ServiceImpl<CwProjectRecordsMapper,
         queryWrapper.nested(wrapper -> {
             wrapper.eq("a.project_master_id", userDTO.getId())  // 条件1:创建人是项目经理1
                     .or()                                   // 逻辑OR
-                    .eq("a.real_header", userDTO.getId());      // 条件2:创建人是项目经理2
+                    .eq("a.real_header", userDTO.getId())       // 条件2:创建人是项目经理2
+                    .or()                                   // 逻辑OR
+                    .eq("a.project_executor", userDTO.getId());  // 条件3:登陆人是项目执行人
         });
         if (ObjectUtil.isNotEmpty(cwProjectRecordsDTO)) {
             if (ArrayUtil.isNotEmpty(cwProjectRecordsDTO.getCreateDates())) {

+ 11 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectRecords/service/dto/CwProjectRecordsDTO.java

@@ -118,6 +118,17 @@ public class CwProjectRecordsDTO extends BaseDTO {
     private String projectMasterName;
 
     private String projectMasterName2;
+
+    /**
+     * 项目实际执行人
+     */
+    private String projectExecutor;
+
+    /**
+     * 项目实际可执行人的id集合
+     */
+    private String projectOperators;
+
     /**
      * 时间查询
      */

+ 17 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/controller/CwProjectReportController.java

@@ -226,6 +226,23 @@ public class CwProjectReportController {
                     }
                 }
             }
+
+            List<String> operatorList = new ArrayList<>();
+
+            // 依次判断三个字段,非空才加入列表
+            if (StringUtils.isNotBlank(i.getProjectExecutor())) {
+                operatorList.add(i.getProjectExecutor());
+            }
+            if (StringUtils.isNotBlank(i.getProjectMasterId())) {
+                operatorList.add(i.getProjectMasterId());
+            }
+            if (StringUtils.isNotBlank(i.getProjectMaster2Id())) {
+                operatorList.add(i.getProjectMaster2Id());
+            }
+
+            // 用逗号拼接,空列表会自动返回空字符串,完美符合需求
+            String projectOperators = String.join(",", operatorList);
+            i.setProjectOperators(projectOperators);
         });
         return ResponseEntity.ok(result);
     }

+ 7 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/domain/CwProjectReportData.java

@@ -123,6 +123,13 @@ public class CwProjectReportData extends BaseDTO {
 
     private String projectMasterId1;
 
+    private String projectExecutor;
+
+    /**
+     * 项目实际可执行人的id集合
+     */
+    private String projectOperators;
+
     /**
      * 项目经理id
      */

+ 1 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/mapper/xml/CwProjectReportMapper.xml

@@ -91,6 +91,7 @@
                         b.project_name AS projectName,
                         b.project_master_id AS projectMasterId,
                         b.real_header AS projectMasterId2,
+                        b.project_executor AS projectExecutor,
                         c.name AS departmentName,
                         d.name AS userName,
                         COALESCE(cw_pa.audit_money, 0) AS auditFees,

+ 4 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/service/CwProjectReportService.java

@@ -715,6 +715,10 @@ public class CwProjectReportService extends ServiceImpl<CwProjectReportMapper, C
         if (StringUtils.isNotEmpty(projectReportData.getReportNo())) {
             queryWrapper.like("new_line.report_no", projectReportData.getReportNo());
         }
+        //5、客户名称
+        if (StringUtils.isNotEmpty(projectReportData.getServedUnitName())) {
+            queryWrapper.like("cwcb.name", projectReportData.getServedUnitName());
+        }
         //6、审计收费
         String[] contractAmounts = projectReportData.getContractAmounts();
         if (contractAmounts != null) {

+ 17 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReportArchive/controller/CwProjectReportArchiveController.java

@@ -42,6 +42,8 @@ import java.net.URLEncoder;
 import java.nio.charset.StandardCharsets;
 import java.text.DecimalFormat;
 import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.time.ZoneId;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.atomic.AtomicReference;
@@ -70,6 +72,21 @@ public class CwProjectReportArchiveController {
     public ResponseEntity<IPage<CwProjectReportArchiveDTO>> data(CwProjectReportArchiveDTO cwProjectReportArchiveDTO, Page<CwProjectReportArchiveDTO> page) throws Exception {
         IPage<CwProjectReportArchiveDTO> result = new Page<CwProjectReportArchiveDTO>();
         result = cwProjectReportArchiveService.findList (page, cwProjectReportArchiveDTO);
+        // 2. 定义对比日期:2026-03-24
+        LocalDate compareDate = LocalDate.of(2026, 3, 24);
+        result.getRecords().stream().forEach(i -> {
+            // 获取每条记录的创建时间(Date 类型)
+            Date createDate = i.getCreateDate();
+
+            // Date 转 LocalDate
+            LocalDate createLocalDate = createDate.toInstant()
+                    .atZone(ZoneId.systemDefault())
+                    .toLocalDate();
+
+            // 核心判断:创建时间 > 2026-03-24 → false,否则 true
+            boolean flag = !createLocalDate.isAfter(compareDate);
+            i.setProjectExecutorFlag(flag);
+        });
         return ResponseEntity.ok (result);
     }
 

+ 2 - 2
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReportArchive/mapper/xml/CwProjectReportArchiveApplyMapper.xml

@@ -177,11 +177,11 @@
         CASE
         WHEN project_master_id IS NOT NULL
         AND project_master_id != ''
-        AND project_master_id NOT IN ('1602914026461380610', '1602914995043614722', '1614824803453370370')
+        AND project_master_id NOT IN ('1602914026461380610', '1602914995043614722', '1614824803453370370', '1602912511302615042')
         THEN project_master_id
         WHEN real_header IS NOT NULL
         AND real_header != ''
-        AND real_header NOT IN ('1602914026461380610', '1602914995043614722', '1614824803453370370')
+        AND real_header NOT IN ('1602914026461380610', '1602914995043614722', '1614824803453370370', '1602912511302615042')
         THEN real_header
         ELSE NULL
         END AS project_manager_id

+ 3 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReportArchive/mapper/xml/CwProjectReportArchiveMapper.xml

@@ -283,6 +283,9 @@
         su1.name as project_master_name,
         su2.name as realHeaderName,
         cw_pr.project_name as project_name,
+        cw_pr.project_master_id as project_master,
+        cw_pr.real_header as real_header,
+        cw_pr.project_executor as projectExecutor,
         cw_prnl.report_no,
         date_format(cw_prnl.report_date,'%Y-%m-%d') as report_date,
         art.ID_ as task_id,

+ 1 - 1
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReportArchive/service/CwProjectReportArchiveApplyService.java

@@ -78,7 +78,7 @@ public class CwProjectReportArchiveApplyService extends ServiceImpl<CwProjectRep
         }
         if(reportData != null) {
             if(StringUtils.isNotBlank(reportData.getProjectId())){
-                //查询项目对应的项目经理是谁(排除张宁、孙闻报、范百顺以外的另一个项目经理(只取一个))
+                //查询项目对应的项目经理是谁(排除张宁、孙文宝、范百顺、潘中以外的另一个项目经理(只取一个))
                 String projectManagerByProjectId = cwProjectReportArchiveApplyMapper.getProjectManagerByProjectId(reportData.getProjectId());
                 reportData.setApplyAuditById(projectManagerByProjectId);
             }

+ 10 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReportArchive/service/dto/CwProjectReportArchiveDTO.java

@@ -455,6 +455,16 @@ public class CwProjectReportArchiveDTO extends BaseDTO {
      */
     private String realHeader;
 
+    /**
+     * 项目实际操作人员
+     */
+    private String projectExecutor;
+
+    /**
+     * 项目实际操作人员对老项目的可操作性判断
+     */
+    private Boolean projectExecutorFlag;
+
 
     private static final long serialVersionUID = 1L;