Sfoglia il codice sorgente

报告号替换导入导出

sangwenwei 5 mesi fa
parent
commit
5158269314

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

@@ -13,6 +13,8 @@ import com.jeeplus.common.excel.ExcelOptions;
 import com.jeeplus.common.excel.annotation.ExportMode;
 import com.jeeplus.common.excel.annotation.ExportMode;
 import com.jeeplus.common.redis.RedisUtils;
 import com.jeeplus.common.redis.RedisUtils;
 import com.jeeplus.common.utils.ResponseUtil;
 import com.jeeplus.common.utils.ResponseUtil;
+import com.jeeplus.finance.invoice.controller.CwFinanceInvoiceController;
+import com.jeeplus.finance.invoice.service.dto.CwFinanceInvoiceDetailDTO;
 import com.jeeplus.finance.invoice.util.EasyPoiUtil;
 import com.jeeplus.finance.invoice.util.EasyPoiUtil;
 import com.jeeplus.finance.invoice.util.FreemarkerUtil;
 import com.jeeplus.finance.invoice.util.FreemarkerUtil;
 import com.jeeplus.finance.invoice.util.SignaturePostUtil;
 import com.jeeplus.finance.invoice.util.SignaturePostUtil;
@@ -22,9 +24,11 @@ import com.jeeplus.finance.projectReport.domain.CwProjectReportSignature;
 import com.jeeplus.finance.projectReport.domain.CwSignatureAnnotator;
 import com.jeeplus.finance.projectReport.domain.CwSignatureAnnotator;
 import com.jeeplus.finance.projectReport.mapper.CwSignatureAnnotatorMapper;
 import com.jeeplus.finance.projectReport.mapper.CwSignatureAnnotatorMapper;
 import com.jeeplus.finance.projectReport.mapper.ProjectReportWorkAttachmentMapper;
 import com.jeeplus.finance.projectReport.mapper.ProjectReportWorkAttachmentMapper;
+import com.jeeplus.finance.projectReport.service.CwProjectReportNumberApplyService;
 import com.jeeplus.finance.projectReport.service.CwProjectReportService;
 import com.jeeplus.finance.projectReport.service.CwProjectReportService;
 import com.jeeplus.finance.projectReport.service.dto.CwProjectReportDTO;
 import com.jeeplus.finance.projectReport.service.dto.CwProjectReportDTO;
 import com.jeeplus.finance.projectReport.service.dto.CwProjectReportSignatureDTO;
 import com.jeeplus.finance.projectReport.service.dto.CwProjectReportSignatureDTO;
+import com.jeeplus.finance.projectReport.service.dto.NumberReplaceDTO;
 import com.jeeplus.finance.projectReport.service.dto.ProjectReportWorkAttachmentDTO;
 import com.jeeplus.finance.projectReport.service.dto.ProjectReportWorkAttachmentDTO;
 import com.jeeplus.finance.workClientInfo.service.dto.CwWorkClientBaseDTO;
 import com.jeeplus.finance.workClientInfo.service.dto.CwWorkClientBaseDTO;
 import com.jeeplus.flowable.feign.IFlowableApi;
 import com.jeeplus.flowable.feign.IFlowableApi;
@@ -44,6 +48,11 @@ import freemarker.template.Template;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.ss.usermodel.WorkbookFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.ResponseEntity;
 import org.springframework.http.ResponseEntity;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.security.access.prepost.PreAuthorize;
@@ -56,6 +65,8 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 import javax.validation.Valid;
 import java.io.*;
 import java.io.*;
+import java.lang.reflect.Field;
+import java.lang.reflect.Type;
 import java.net.URLEncoder;
 import java.net.URLEncoder;
 import java.util.*;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeUnit;
@@ -69,6 +80,8 @@ import java.util.stream.Collectors;
 @Api("财务报告信息")
 @Api("财务报告信息")
 @RequestMapping(value = "/cwProjectReport")
 @RequestMapping(value = "/cwProjectReport")
 public class CwProjectReportController {
 public class CwProjectReportController {
+    private static Logger log = LoggerFactory.getLogger(CwProjectReportController.class);
+
 
 
     @Resource
     @Resource
     private CwProjectReportService projectReportService;
     private CwProjectReportService projectReportService;
@@ -78,6 +91,8 @@ public class CwProjectReportController {
     private ProjectReportWorkAttachmentMapper attachmentMapper;
     private ProjectReportWorkAttachmentMapper attachmentMapper;
     @Autowired
     @Autowired
     private IFlowableApi flowTaskService;
     private IFlowableApi flowTaskService;
+    @Resource
+    private CwProjectReportNumberApplyService cwProjectReportNumberApplyService;
 
 
 
 
     /**
     /**
@@ -1151,5 +1166,89 @@ public class CwProjectReportController {
     }
     }
 
 
 
 
+    /**
+     * 报告号替换
+     * @param file
+     * @param year
+     * @return
+     */
+    @ApiLog("报告号替换")
+    @PostMapping("numberReplace")
+    public void numberReplace(@RequestParam("file") MultipartFile file,@RequestParam("year") String year, HttpServletRequest request,HttpServletResponse response) throws IOException {
+        ArrayList<NumberReplaceDTO> replaceDTOArrayList = new ArrayList<>();
+
+        List<NumberReplaceDTO> listA = new ArrayList<>();
+        //获取sheet
+        listA = EasyPoiUtil.importExcel(file, 0, 1, NumberReplaceDTO.class);
+        //去除excel中的空行
+        listA = getExcelList(listA);
+        //对报告号进行替换
+        cwProjectReportNumberApplyService.replaceNumber(listA,replaceDTOArrayList,year);
+        if (CollectionUtil.isNotEmpty(replaceDTOArrayList)){
+            //对文件再次进行导出
+            String fileName = file.getOriginalFilename ();
+            Workbook workbook = WorkbookFactory.create(file.getInputStream()); // 自动识别文件格式
+
+            // 获取第一个 sheet 的名称
+            Sheet sheet = workbook.getSheetAt(0);  // 获取第一个 sheet
+            String sheetName = sheet.getSheetName();  // 获取 sheet 的名称
+
+            EasyPoiUtil.exportExcel ( replaceDTOArrayList, "报告信息",  sheetName, NumberReplaceDTO.class, fileName, response );
+
+        }
+    }
+
+
+    /**
+     * 去除excel中的空行
+     * @param list
+     * @return
+     */
+    public ArrayList<NumberReplaceDTO> getExcelList(List<NumberReplaceDTO> list){
+
+        ArrayList<NumberReplaceDTO> numberReplaceDTOS = new ArrayList<>();
+
+        list.stream().forEach(item->{
+            if(objectCheckIsNull(item)){
+                numberReplaceDTOS.add(item);
+            }
+        });
+
+        return numberReplaceDTOS;
+    }
+
+    public static boolean objectCheckIsNull(Object object) {
+        boolean flag = false; //定义返回结果,默认为true
+
+        if (Objects.isNull(object)) {
+            flag = false;
+        } else {
+            Class clazz = (Class) object.getClass(); // 得到类对象
+            Field fields[] = clazz.getDeclaredFields(); // 得到所有属性
+            for (Field field : fields) {
+                if("serialVersionUID".equals(field.getName()) || "BIZ_CODE".equalsIgnoreCase(field.getName())){
+                    continue;
+                }
+                field.setAccessible(true);
+                Object fieldValue = null;
+                try {
+                    fieldValue = field.get(object); //得到属性值
+                    Type fieldType = field.getGenericType();//得到属性类型
+                    String fieldName = field.getName(); // 得到属性名
+                    log.info("属性类型:" + fieldType + ",属性名:" + fieldName + ",属性值:" + fieldValue);
+                } catch (IllegalArgumentException e) {
+                    log.error(e.getMessage(), e);
+                } catch (IllegalAccessException e) {
+                    log.error(e.getMessage(), e);
+                }
+                if (fieldValue != null && fieldValue != "") {  //只要有一个属性值不为null 就返回false 表示对象不为null
+                    flag = true;
+                    break;
+                }
+            }
+        }
+
+        return flag;
+    }
 
 
 }
 }

+ 13 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/mapper/CwProjectReportReviewMapper.java

@@ -44,6 +44,13 @@ public interface CwProjectReportReviewMapper extends BaseMapper<CwProjectReview>
      */
      */
     ReportNoDto getProjectReportByNumber(String number);
     ReportNoDto getProjectReportByNumber(String number);
 
 
+    /**
+     * 根据模糊查询最新的报告号
+     * @param number
+     * @return
+     */
+    String getNewProjectReportByNumber(@Param("number") String number);
+
 
 
     @InterceptorIgnore(tenantLine = "true")
     @InterceptorIgnore(tenantLine = "true")
     CwProjectReview selectById(String id);
     CwProjectReview selectById(String id);
@@ -62,4 +69,10 @@ public interface CwProjectReportReviewMapper extends BaseMapper<CwProjectReview>
      */
      */
     CwProjectReportData selectProjectReportById(String id);
     CwProjectReportData selectProjectReportById(String id);
 
 
+    /**
+     * 根据id修改报告号
+     * @param replaceNumber
+     * @param id
+     */
+    void updateNumberById(@Param("replaceNumber") String replaceNumber, @Param("id") String id);
 }
 }

+ 14 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/mapper/xml/CwProjectReportReviewMapper.xml

@@ -34,6 +34,16 @@
         limit 1
         limit 1
     </select>
     </select>
 
 
+    <select id="getNewProjectReportByNumber" resultType="string">
+        SELECT
+            a.report_no
+        FROM cw_project_report_new_line a
+        where a.report_no like concat ('%',#{number},'%')
+        order By
+            CAST(SUBSTRING(a.report_no, LOCATE(']', a.report_no) + 1, LOCATE('号', a.report_no) - LOCATE(']', a.report_no) - 1) AS UNSIGNED) DESC
+        limit 1
+    </select>
+
     <select id="selectById" resultType="com.jeeplus.finance.projectReport.domain.CwProjectReview">
     <select id="selectById" resultType="com.jeeplus.finance.projectReport.domain.CwProjectReview">
         SELECT
         SELECT
             id,
             id,
@@ -144,4 +154,8 @@
         where a.id = #{id}
         where a.id = #{id}
     </select>
     </select>
 
 
+    <update id="updateNumberById">
+        update cw_project_report_new_line set report_no = #{replaceNumber} where id = #{id}
+    </update>
+
 </mapper>
 </mapper>

+ 162 - 3
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/service/CwProjectReportNumberApplyService.java

@@ -1,5 +1,6 @@
 package com.jeeplus.finance.projectReport.service;
 package com.jeeplus.finance.projectReport.service;
 
 
+import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.extra.spring.SpringUtil;
 import cn.hutool.extra.spring.SpringUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -15,6 +16,7 @@ import com.jeeplus.finance.projectReport.domain.*;
 import com.jeeplus.finance.projectReport.mapper.CwProjectInfoMapper;
 import com.jeeplus.finance.projectReport.mapper.CwProjectInfoMapper;
 import com.jeeplus.finance.projectReport.mapper.CwProjectReportNumberApplyMapper;
 import com.jeeplus.finance.projectReport.mapper.CwProjectReportNumberApplyMapper;
 import com.jeeplus.finance.projectReport.mapper.CwProjectReportReviewMapper;
 import com.jeeplus.finance.projectReport.mapper.CwProjectReportReviewMapper;
+import com.jeeplus.finance.projectReport.service.dto.NumberReplaceDTO;
 import com.jeeplus.finance.reimbursementApproval.approvalInfo.service.dto.ReportNoDto;
 import com.jeeplus.finance.reimbursementApproval.approvalInfo.service.dto.ReportNoDto;
 import com.jeeplus.sys.feign.IUserApi;
 import com.jeeplus.sys.feign.IUserApi;
 import com.jeeplus.sys.feign.IWorkAttachmentApi;
 import com.jeeplus.sys.feign.IWorkAttachmentApi;
@@ -27,9 +29,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 
 import javax.annotation.Resource;
 import javax.annotation.Resource;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.InvocationTargetException;
-import java.util.Date;
-import java.util.Map;
-import java.util.UUID;
+import java.util.*;
 
 
 /**
 /**
  * @author 王强
  * @author 王强
@@ -294,4 +294,163 @@ public class CwProjectReportNumberApplyService extends ServiceImpl<CwProjectRepo
 
 
         return info.getId();
         return info.getId();
     }
     }
+
+    /**
+     * 对报告号进行替换
+     * @param listA (表中的数据)
+     * @param replaceDTOArrayList
+     * @param year
+     */
+    public void replaceNumber(List<NumberReplaceDTO> listA, ArrayList<NumberReplaceDTO> replaceDTOArrayList,String year) {
+        if (CollectionUtil.isNotEmpty(listA)){
+            for (NumberReplaceDTO dto : listA) {
+                NumberReplaceDTO numberReplaceDTO = new NumberReplaceDTO();
+                BeanUtils.copyProperties(dto,numberReplaceDTO);
+
+                if (StringUtils.isNotBlank(dto.getReportNo()) && dto.getReportNo().contains("苏兴会")){
+                    //获取 苏兴会x字
+                    String letterPart = dto.getReportNo().substring(0, dto.getReportNo().lastIndexOf("["));
+
+                    String newNumber = letterPart + "["+ year + "]";
+                    int anInt = 0;
+                    //判断该报告号的类型是基字,特字,审字,验字
+                    String num = reviewMapper.getNewProjectReportByNumber(newNumber);
+                    switch (letterPart) {
+                        case "苏兴会基字":   //基字
+                            //查询对应年份的最新编号
+                            if (StringUtils.isNotBlank(num)){
+                                //根据编号获取流水号
+                                String numberPart = num.substring(num.lastIndexOf("]") + 1, num.lastIndexOf("号"));
+                                anInt = Integer.parseInt(numberPart);
+                                anInt++;
+                                do {
+                                    String replaceNumber = letterPart + "["+ year + "]"+anInt+"号";
+                                    //根据最新的replaceNumber查询该报告号是否存在
+                                    ReportNoDto projectReportByNumber = reviewMapper.getProjectReportByNumber(replaceNumber);
+                                    if (ObjectUtil.isEmpty(projectReportByNumber)){
+                                        numberReplaceDTO.setReplaceNo(replaceNumber);
+                                        //重新赋值
+                                        replaceDTOArrayList.add(numberReplaceDTO);
+                                        //修改报告号
+                                        ReportNoDto reportNoDto = reviewMapper.getProjectReportByNumber(dto.getReportNo());
+                                        if (ObjectUtil.isNotEmpty(reportNoDto)){
+                                            reviewMapper.updateNumberById(replaceNumber,reportNoDto.getId());
+                                            break;
+                                        }
+
+                                    }
+                                    anInt++;
+                                } while (true);
+                            }
+                            break;
+                        case "苏兴会咨字":   //咨字
+                            //查询对应年份的最新编号
+                            if (StringUtils.isNotBlank(num)){
+                                //根据编号获取流水号
+                                String numberPart = num.substring(num.lastIndexOf("]") + 1, num.lastIndexOf("号"));
+                                anInt = Integer.parseInt(numberPart);
+                                anInt++;
+                                do {
+                                    String replaceNumber = letterPart + "["+ year + "]"+anInt+"号";
+                                    //根据最新的replaceNumber查询该报告号是否存在
+                                    ReportNoDto projectReportByNumber = reviewMapper.getProjectReportByNumber(replaceNumber);
+                                    if (ObjectUtil.isEmpty(projectReportByNumber)){
+                                        numberReplaceDTO.setReplaceNo(replaceNumber);
+                                        //重新赋值
+                                        replaceDTOArrayList.add(numberReplaceDTO);
+                                        //修改报告号
+                                        ReportNoDto reportNoDto = reviewMapper.getProjectReportByNumber(dto.getReportNo());
+                                        if (ObjectUtil.isNotEmpty(reportNoDto)){
+                                            reviewMapper.updateNumberById(replaceNumber,reportNoDto.getId());
+                                            break;
+                                        }
+                                    }
+                                    anInt++;
+                                } while (true);
+                            }
+                            break;
+                        case "苏兴会审字":   //审字
+                            //查询对应年份的最新编号
+                            if (StringUtils.isNotBlank(num)){
+                                //根据编号获取流水号
+                                String numberPart = num.substring(num.lastIndexOf("]") + 1, num.lastIndexOf("号"));
+                                anInt = Integer.parseInt(numberPart);
+                                anInt++;
+                                do {
+                                    String replaceNumber = letterPart + "["+ year + "]"+anInt+"号";
+                                    //根据最新的replaceNumber查询该报告号是否存在
+                                    ReportNoDto projectReportByNumber = reviewMapper.getProjectReportByNumber(replaceNumber);
+                                    if (ObjectUtil.isEmpty(projectReportByNumber)){
+                                        numberReplaceDTO.setReplaceNo(replaceNumber);
+                                        //重新赋值
+                                        replaceDTOArrayList.add(numberReplaceDTO);
+                                        //修改报告号
+                                        ReportNoDto reportNoDto = reviewMapper.getProjectReportByNumber(dto.getReportNo());
+                                        if (ObjectUtil.isNotEmpty(reportNoDto)){
+                                            reviewMapper.updateNumberById(replaceNumber,reportNoDto.getId());
+                                            break;
+                                        }
+                                    }
+                                    anInt++;
+                                } while (true);
+                            }
+                            break;
+                        case "苏兴会验字":   //验字
+                            //查询对应年份的最新编号
+                            if (StringUtils.isNotBlank(num)){
+                                //根据编号获取流水号
+                                String numberPart = num.substring(num.lastIndexOf("]") + 1, num.lastIndexOf("号"));
+                                anInt = Integer.parseInt(numberPart);
+                                anInt++;
+                                do {
+                                    String replaceNumber = letterPart + "["+ year + "]"+anInt+"号";
+                                    //根据最新的replaceNumber查询该报告号是否存在
+                                    ReportNoDto projectReportByNumber = reviewMapper.getProjectReportByNumber(replaceNumber);
+                                    if (ObjectUtil.isEmpty(projectReportByNumber)){
+                                        numberReplaceDTO.setReplaceNo(replaceNumber);
+                                        //重新赋值
+                                        replaceDTOArrayList.add(numberReplaceDTO);
+                                        //修改报告号
+                                        ReportNoDto reportNoDto = reviewMapper.getProjectReportByNumber(dto.getReportNo());
+                                        if (ObjectUtil.isNotEmpty(reportNoDto)){
+                                            reviewMapper.updateNumberById(replaceNumber,reportNoDto.getId());
+                                            break;
+                                        }
+                                    }
+                                    anInt++;
+                                } while (true);
+                            }
+                            break;
+                        case "苏兴会特字":   //特字
+                            //查询对应年份的最新编号
+                            if (StringUtils.isNotBlank(num)){
+                                //根据编号获取流水号
+                                String numberPart = num.substring(num.lastIndexOf("]") + 1, num.lastIndexOf("号"));
+                                anInt = Integer.parseInt(numberPart);
+                                anInt++;
+                                do {
+                                    String replaceNumber = letterPart + "["+ year + "]"+anInt+"号";
+                                    //根据最新的replaceNumber查询该报告号是否存在
+                                    ReportNoDto projectReportByNumber = reviewMapper.getProjectReportByNumber(replaceNumber);
+                                    if (ObjectUtil.isEmpty(projectReportByNumber)){
+                                        numberReplaceDTO.setReplaceNo(replaceNumber);
+                                        //重新赋值
+                                        replaceDTOArrayList.add(numberReplaceDTO);
+                                        //修改报告号
+                                        ReportNoDto reportNoDto = reviewMapper.getProjectReportByNumber(dto.getReportNo());
+                                        if (ObjectUtil.isNotEmpty(reportNoDto)){
+                                            reviewMapper.updateNumberById(replaceNumber,reportNoDto.getId());
+                                            break;
+                                        }
+                                    }
+                                    anInt++;
+                                } while (true);
+                            }
+                            break;
+                    }
+                }
+            }
+        }
+
+    }
 }
 }

+ 21 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/projectReport/service/dto/NumberReplaceDTO.java

@@ -0,0 +1,21 @@
+package com.jeeplus.finance.projectReport.service.dto;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import lombok.Data;
+
+@Data
+public class NumberReplaceDTO {
+
+    @Excel(name = "项目编号",width = 20,orderNum = "1")
+    private String projectNumber;
+
+    @Excel(name = "项目名称",width = 40,orderNum = "2")
+    private String projectName;
+
+    @Excel(name = "报告文号",width = 40,orderNum = "3")
+    private String reportNo;
+
+    @Excel(name = "替换文号",width = 40,orderNum = "4")
+    private String replaceNo;
+
+}