diff --git a/yxt-as/src/main/java/com/yxt/anrui/as/api/asbusclaiminvoicebill/AsBusclaimInvoiceBillExcelVo.java b/yxt-as/src/main/java/com/yxt/anrui/as/api/asbusclaiminvoicebill/AsBusclaimInvoiceBillExcelVo.java new file mode 100644 index 0000000000..5175e303b6 --- /dev/null +++ b/yxt-as/src/main/java/com/yxt/anrui/as/api/asbusclaiminvoicebill/AsBusclaimInvoiceBillExcelVo.java @@ -0,0 +1,37 @@ +package com.yxt.anrui.as.api.asbusclaiminvoicebill; + +import com.yxt.common.core.utils.ExportEntityMap; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @description: + * @author: dimengzhe + * @date: 2024/5/10 + **/ +@Data +public class AsBusclaimInvoiceBillExcelVo { + + @ApiModelProperty("索赔单号") + @ExportEntityMap(CnName = "索赔单号", EnName = "claimBillNo") + private String claimBillNo; + @ApiModelProperty("索赔工时费") + @ExportEntityMap(CnName = "索赔工时费", EnName = "claimHourAmount") + private String claimHourAmount; + @ApiModelProperty("索赔材料费") + @ExportEntityMap(CnName = "索赔材料费", EnName = "claimGoodsAmount") + private String claimGoodsAmount; + @ApiModelProperty("外出费") + @ExportEntityMap(CnName = "外出费", EnName = "claimOutAmount") + private String claimOutAmount; + @ApiModelProperty("厂家补助费") + @ExportEntityMap(CnName = "厂家补助", EnName = "claimSubsidyAmount") + private String claimSubsidyAmount; + @ApiModelProperty("其他费用") + @ExportEntityMap(CnName = "其他费用", EnName = "claimOtherAmount") + private String claimOtherAmount; + + +} diff --git a/yxt-as/src/main/java/com/yxt/anrui/as/api/asbusclaiminvoicebill/ExcelInfoVo.java b/yxt-as/src/main/java/com/yxt/anrui/as/api/asbusclaiminvoicebill/ExcelInfoVo.java new file mode 100644 index 0000000000..8dfddbca19 --- /dev/null +++ b/yxt-as/src/main/java/com/yxt/anrui/as/api/asbusclaiminvoicebill/ExcelInfoVo.java @@ -0,0 +1,27 @@ +package com.yxt.anrui.as.api.asbusclaiminvoicebill; + +import com.yxt.common.core.utils.ExportEntityMap; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @description: + * @author: dimengzhe + * @date: 2024/5/10 + **/ +@Data +public class ExcelInfoVo { + + @ApiModelProperty("索赔单号") + private String claimBillNo; + @ApiModelProperty("索赔工时费") + private String claimHourAmount; + @ApiModelProperty("索赔材料费") + private String claimGoodsAmount; + @ApiModelProperty("外出费") + private String claimOutAmount; + @ApiModelProperty("厂家补助") + private String claimSubsidyAmount; + @ApiModelProperty("其他费用") + private String claimOtherAmount; +} diff --git a/yxt-as/src/main/java/com/yxt/anrui/as/api/asbusclaiminvoicebill/ReturnExcelInfoVo.java b/yxt-as/src/main/java/com/yxt/anrui/as/api/asbusclaiminvoicebill/ReturnExcelInfoVo.java new file mode 100644 index 0000000000..598defe4bf --- /dev/null +++ b/yxt-as/src/main/java/com/yxt/anrui/as/api/asbusclaiminvoicebill/ReturnExcelInfoVo.java @@ -0,0 +1,18 @@ +package com.yxt.anrui.as.api.asbusclaiminvoicebill; + +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +/** + * @description: + * @author: dimengzhe + * @date: 2024/5/10 + **/ +@Data +public class ReturnExcelInfoVo { + + private String checkInfo; + private List infos = new ArrayList<>(); +} diff --git a/yxt-as/src/main/java/com/yxt/anrui/as/api/asbusclaiminvoicebilldetail/AsBusclaimInvoiceBillDetail.java b/yxt-as/src/main/java/com/yxt/anrui/as/api/asbusclaiminvoicebilldetail/AsBusclaimInvoiceBillDetail.java index 86d4e06dc2..e957ec94b3 100644 --- a/yxt-as/src/main/java/com/yxt/anrui/as/api/asbusclaiminvoicebilldetail/AsBusclaimInvoiceBillDetail.java +++ b/yxt-as/src/main/java/com/yxt/anrui/as/api/asbusclaiminvoicebilldetail/AsBusclaimInvoiceBillDetail.java @@ -27,11 +27,11 @@ public class AsBusclaimInvoiceBillDetail extends BaseEntity { @ApiModelProperty("索赔工时费") private BigDecimal claimHourAmount; @ApiModelProperty("索赔材料费") - private String claimGoodsAmount; + private BigDecimal claimGoodsAmount; @ApiModelProperty("外出费") - private String claimOutAmount; + private BigDecimal claimOutAmount; @ApiModelProperty("厂家补助费") - private String claimSubsidyAmount; + private BigDecimal claimSubsidyAmount; @ApiModelProperty("其他费用") - private String claimOtherAmount; + private BigDecimal claimOtherAmount; } diff --git a/yxt-as/src/main/java/com/yxt/anrui/as/api/asbusclaiminvoicebilldetail/AsBusclaimInvoiceBillDetailDto.java b/yxt-as/src/main/java/com/yxt/anrui/as/api/asbusclaiminvoicebilldetail/AsBusclaimInvoiceBillDetailDto.java index ff60a26a8f..ffd7f08b8d 100644 --- a/yxt-as/src/main/java/com/yxt/anrui/as/api/asbusclaiminvoicebilldetail/AsBusclaimInvoiceBillDetailDto.java +++ b/yxt-as/src/main/java/com/yxt/anrui/as/api/asbusclaiminvoicebilldetail/AsBusclaimInvoiceBillDetailDto.java @@ -22,7 +22,7 @@ public class AsBusclaimInvoiceBillDetailDto { @ApiModelProperty("车架号") private String vinNo; @ApiModelProperty("索赔工时费") - private BigDecimal claimHourAmount; + private String claimHourAmount; @ApiModelProperty("索赔材料费") private String claimGoodsAmount; @ApiModelProperty("外出费") diff --git a/yxt-as/src/main/java/com/yxt/anrui/as/biz/asbusclaiminvoicebill/AsBusclaimInvoiceBillRest.java b/yxt-as/src/main/java/com/yxt/anrui/as/biz/asbusclaiminvoicebill/AsBusclaimInvoiceBillRest.java index fe9b00aa72..d75435d607 100644 --- a/yxt-as/src/main/java/com/yxt/anrui/as/biz/asbusclaiminvoicebill/AsBusclaimInvoiceBillRest.java +++ b/yxt-as/src/main/java/com/yxt/anrui/as/biz/asbusclaiminvoicebill/AsBusclaimInvoiceBillRest.java @@ -2,12 +2,10 @@ package com.yxt.anrui.as.biz.asbusclaiminvoicebill; import cn.hutool.core.bean.BeanUtil; import com.yxt.anrui.as.api.asbusclaimbill.AsBusclaimBillVo; -import com.yxt.anrui.as.api.asbusclaiminvoicebill.AsBusclaimInvoiceBillDetailsVo; -import com.yxt.anrui.as.api.asbusclaiminvoicebill.AsBusclaimInvoiceBillDto; -import com.yxt.anrui.as.api.asbusclaiminvoicebill.AsBusclaimInvoiceBillQuery; -import com.yxt.anrui.as.api.asbusclaiminvoicebill.AsBusclaimInvoiceBillVo; +import com.yxt.anrui.as.api.asbusclaiminvoicebill.*; import com.yxt.anrui.as.api.asbusclaiminvoicebill.flowable.*; import com.yxt.anrui.as.feign.flowable.flow.BusinessVariables; +import com.yxt.common.base.utils.ExportExcelUtils; import com.yxt.common.core.query.PagerQuery; import com.yxt.common.core.result.ResultBean; import com.yxt.common.core.vo.PagerVo; @@ -15,8 +13,15 @@ import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.openfeign.SpringQueryMap; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.util.ArrayList; import java.util.List; /** @@ -30,6 +35,8 @@ public class AsBusclaimInvoiceBillRest { @Autowired private AsBusclaimInvoiceBillService asBusclaimInvoiceBillService; + @Autowired + private HttpServletResponse response; @PostMapping("/listPage") @ApiOperation("厂家索赔开票分页") @@ -57,6 +64,28 @@ public class AsBusclaimInvoiceBillRest { return asBusclaimInvoiceBillService.details(sid); } + @PostMapping("/downloadExcel") + @ApiOperation(value = "下载模板") + public void downloadExcel() { + List list = new ArrayList<>(); + //定义导出的excel名字 + String excelName = "索赔单开票明细导入模板"; + String fileNameURL = ""; + try { + fileNameURL = URLEncoder.encode(excelName, "UTF-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + ExportExcelUtils.export(fileNameURL, list, AsBusclaimInvoiceBillExcelVo.class, response); + } + + @ApiOperation(value = "导入") + @PostMapping("/getExcelInfo") + ResultBean> getExcelInfo(@RequestParam(value = "file") MultipartFile file, HttpServletRequest request, @RequestParam(value = "useOrgSid") String useOrgSid) throws IOException { + return asBusclaimInvoiceBillService.getExcelInfo(file, request, useOrgSid); + } + + @ApiOperation("提交") @PostMapping("/submitApply") public ResultBean submitApply(@Valid @RequestBody SubmitBusclaimInvoiceBillDto dto) { diff --git a/yxt-as/src/main/java/com/yxt/anrui/as/biz/asbusclaiminvoicebill/AsBusclaimInvoiceBillService.java b/yxt-as/src/main/java/com/yxt/anrui/as/biz/asbusclaiminvoicebill/AsBusclaimInvoiceBillService.java index 87a399f28a..c001614124 100644 --- a/yxt-as/src/main/java/com/yxt/anrui/as/biz/asbusclaiminvoicebill/AsBusclaimInvoiceBillService.java +++ b/yxt-as/src/main/java/com/yxt/anrui/as/biz/asbusclaiminvoicebill/AsBusclaimInvoiceBillService.java @@ -31,11 +31,22 @@ import com.yxt.common.core.query.PagerQuery; import com.yxt.common.core.result.ResultBean; import com.yxt.common.core.vo.PagerVo; import org.apache.commons.lang3.StringUtils; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.tomcat.util.threads.ThreadPoolExecutor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; +import javax.servlet.http.HttpServletRequest; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; import java.util.*; import java.util.concurrent.*; import java.util.stream.Collectors; @@ -486,4 +497,170 @@ public class AsBusclaimInvoiceBillService extends MybatisBaseService> getExcelInfo(MultipartFile file, HttpServletRequest request, String useOrgSid) throws IOException { + ResultBean rb = ResultBean.fireFail(); + String temp = request.getSession().getServletContext().getRealPath(File.separator) + "temp";// 临时目录 + File tempFile = new File(temp); + if (!tempFile.exists()) { + tempFile.mkdirs(); + } + String fileName = file.getOriginalFilename(); + if (!fileName.matches("^.+\\.(?i)(xls)$") && !fileName.matches("^.+\\.(?i)(xlsx)$")) { + return rb.fail().setMsg("上传文件不正确"); + } + int[] resultCell = new int[]{0, 1, 2, 3, 4, 5}; + List list = new ArrayList<>(); + List list2 = new ArrayList<>(); + boolean isExcel2003 = true; + if (fileName.matches("^.+\\.(?i)(xlsx)$")) { + isExcel2003 = false; + } + InputStream is = file.getInputStream(); + Workbook wb = null; + if (isExcel2003) { + wb = new HSSFWorkbook(is); + } else { + wb = new XSSFWorkbook(is); + } + Sheet sheet = wb.getSheetAt(0); + ReturnExcelInfoVo importReturn = getSheetVal(sheet, resultCell, useOrgSid); + list = importReturn.getInfos(); + if (StringUtils.isNotBlank(importReturn.getCheckInfo())) { + return rb.setMsg(importReturn.getCheckInfo()); + } else { + return rb.success().setData(list).setMsg("成功导入数据,请点击确定按钮"); + } + } + + private ReturnExcelInfoVo getSheetVal(Sheet sheet, int[] resultCell, String useOrgSid) { + ReturnExcelInfoVo returnExcelInfoVo = new ReturnExcelInfoVo(); + List importVoList = new ArrayList<>(); + Set checkWord = new HashSet<>(); + for (int r = 1; r <= sheet.getLastRowNum(); r++) { + Row row = sheet.getRow(r); + if (row == null) { + continue; + } + ExcelInfoVo excelInfoVo = new ExcelInfoVo(); + for (int i = 0; i < row.getPhysicalNumberOfCells(); i++) { + String trim = new String(); + try { + trim = getCellVal(row.getCell(i)).toString().trim(); + if (StringUtils.isBlank(trim)) { + NullPointerException nullPointerException = new NullPointerException(); + } + String temp = getCellVal(row.getCell(i)).toString().trim(); + temp = temp.replace(".0", ""); + for (int j = 0; j < resultCell.length; j++) { + if (i == resultCell[j]) { + switch (i) { + case 0: + excelInfoVo.setClaimBillNo(temp); + break; + case 1: + excelInfoVo.setClaimHourAmount(temp); + break; + case 2: + excelInfoVo.setClaimGoodsAmount(temp); + break; + case 3: + excelInfoVo.setClaimOutAmount(temp); + break; + case 4: + excelInfoVo.setClaimSubsidyAmount(temp); + case 5: + excelInfoVo.setClaimOtherAmount(temp); + default: + break; + } + + } else { + continue; + } + } + } catch (Exception e) { + if (StringUtils.isBlank(trim)) { + String word = new String(); + switch (i) { + case 0: + word = "索赔单号"; + break; + case 1: + word = "索赔工时费"; + break; + case 2: + word = "索赔材料费"; + break; + case 3: + word = "外出费"; + break; + case 4: + word = "厂家补助"; + break; + case 5: + word = "其他费用"; + break; + default: + break; + } + continue; + } + + } + + } + importVoList.add(excelInfoVo); + + } + if (!importVoList.isEmpty()) { + for (ExcelInfoVo excelInfoVo : importVoList) { + if (StringUtils.isBlank(excelInfoVo.getClaimBillNo())) { + checkWord.add("索赔单号不能为空"); + } + + } + } + StringBuffer sbcheck1 = new StringBuffer(); + if (!checkWord.isEmpty()) { + for (String s : checkWord) { + if (StringUtils.isBlank(s)) { + continue; + } + sbcheck1.append(s).append(";"); + } + } + if (sbcheck1.length() > 0) { + sbcheck1.delete(sbcheck1.length() - 1, sbcheck1.length()); + returnExcelInfoVo.setCheckInfo(sbcheck1.toString()); + returnExcelInfoVo.setInfos(new ArrayList<>()); + return returnExcelInfoVo; + } + returnExcelInfoVo.setInfos(importVoList); + return returnExcelInfoVo; + } + + + public Object getCellVal(Cell cell) { + Object obj = null; + if (cell != null) { + switch (cell.getCellTypeEnum()) { + case BOOLEAN: + obj = cell.getBooleanCellValue(); + break; + case ERROR: + obj = cell.getErrorCellValue(); + break; + case NUMERIC: + obj = cell.getNumericCellValue(); + break; + case STRING: + obj = cell.getStringCellValue(); + break; + default: + break; + } + } + return obj; + } }