|
|
@ -30,6 +30,10 @@ import cn.hutool.core.date.DateTime; |
|
|
|
import cn.hutool.core.date.DateUtil; |
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage; |
|
|
|
import com.yxt.anrui.base.api.basevehicle.BaseVehicleFeign; |
|
|
|
import com.yxt.anrui.base.api.basevehicle.BaseVehicleRebateQuery; |
|
|
|
import com.yxt.anrui.base.api.basevehicle.BaseVehicleRebateVo; |
|
|
|
import com.yxt.anrui.portal.api.dictcommon.DictCommonFeign; |
|
|
|
import com.yxt.anrui.portal.api.sysorganization.SysOrganizationFeign; |
|
|
|
import com.yxt.anrui.portal.api.sysorganization.SysOrganizationVo; |
|
|
|
import com.yxt.anrui.portal.api.sysstafforg.SysStaffOrgFeign; |
|
|
@ -44,12 +48,26 @@ import com.yxt.common.core.query.PagerQuery; |
|
|
|
import com.yxt.common.core.result.ResultBean; |
|
|
|
import com.yxt.common.core.vo.PagerVo; |
|
|
|
|
|
|
|
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.springframework.beans.factory.annotation.Autowired; |
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
import org.springframework.web.multipart.MultipartFile; |
|
|
|
|
|
|
|
import javax.servlet.http.HttpServletRequest; |
|
|
|
import javax.servlet.http.HttpServletResponse; |
|
|
|
import java.io.File; |
|
|
|
import java.io.IOException; |
|
|
|
import java.io.InputStream; |
|
|
|
import java.io.OutputStream; |
|
|
|
import java.math.BigDecimal; |
|
|
|
import java.util.Date; |
|
|
|
import java.util.List; |
|
|
|
import java.net.URLEncoder; |
|
|
|
import java.util.*; |
|
|
|
import java.util.regex.Pattern; |
|
|
|
|
|
|
|
/** |
|
|
|
* Project: anrui-scm(单车返利) <br/> |
|
|
@ -73,6 +91,12 @@ public class ScmVehRebateService extends MybatisBaseService<ScmVehRebateMapper, |
|
|
|
private SysStaffOrgFeign sysStaffOrgFeign; |
|
|
|
@Autowired |
|
|
|
private SysOrganizationFeign sysOrganizationFeign; |
|
|
|
@Autowired |
|
|
|
private HttpServletResponse response; |
|
|
|
@Autowired |
|
|
|
private BaseVehicleFeign baseVehicleFeign; |
|
|
|
@Autowired |
|
|
|
private DictCommonFeign dictCommonFeign; |
|
|
|
|
|
|
|
public PagerVo<ScmVehRebateVo> listPageVo(PagerQuery<ScmVehRebateQuery> pq) { |
|
|
|
ScmVehRebateQuery query = pq.getParams(); |
|
|
@ -408,4 +432,307 @@ public class ScmVehRebateService extends MybatisBaseService<ScmVehRebateMapper, |
|
|
|
public void updateWithholdingDateBySid(String vehRebateSid) { |
|
|
|
baseMapper.updateWithholdingDateBySid(vehRebateSid); |
|
|
|
} |
|
|
|
|
|
|
|
public void downloadExcel() { |
|
|
|
try { |
|
|
|
InputStream resourceAsStream = this.getClass().getClassLoader().getResourceAsStream("static/单车返利管理.xls"); |
|
|
|
//获取要下载的模板名称
|
|
|
|
String fileName = "单车返利管理.xls"; |
|
|
|
response.setHeader("content-type", "application/octet-stream"); |
|
|
|
response.setContentType("application/octet-stream"); |
|
|
|
// 下载文件能正常显示中文
|
|
|
|
fileName = URLEncoder.encode(fileName, "UTF-8"); |
|
|
|
response.setHeader("Content-Disposition", "attachment;filename=" + fileName); |
|
|
|
response.setHeader("fileName", fileName); |
|
|
|
response.setHeader("Access-Control-Expose-Headers", "filename"); |
|
|
|
OutputStream out = response.getOutputStream(); |
|
|
|
byte[] b = new byte[2048]; |
|
|
|
int len; |
|
|
|
while ((len = resourceAsStream.read(b)) != -1) { |
|
|
|
out.write(b, 0, len); |
|
|
|
} |
|
|
|
out.close(); |
|
|
|
resourceAsStream.close(); |
|
|
|
} catch (Exception ex) { |
|
|
|
ex.printStackTrace(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public ResultBean getExcelInfo(MultipartFile file, HttpServletRequest request, String userSid, String orgPath) 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}; |
|
|
|
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); |
|
|
|
VehRebateExcelInfo importReturn = getSheetVal(sheet, resultCell, userSid); |
|
|
|
if (StringUtils.isNotBlank(importReturn.getCheckInfo())) { |
|
|
|
return rb.setMsg(importReturn.getCheckInfo()); |
|
|
|
} else { |
|
|
|
List<ScmVehRebateExcelInfo> infos = importReturn.getInfos(); |
|
|
|
for (ScmVehRebateExcelInfo info : infos) { |
|
|
|
PagerQuery<BaseVehicleRebateQuery> pq = new PagerQuery<>(); |
|
|
|
BaseVehicleRebateQuery params = new BaseVehicleRebateQuery(); |
|
|
|
params.setVinNo(info.getVinNo()); |
|
|
|
params.setUserSid(userSid); |
|
|
|
pq.setParams(params); |
|
|
|
PagerVo<BaseVehicleRebateVo> data = baseVehicleFeign.vehicleRebateList(pq).getData(); |
|
|
|
BaseVehicleRebateVo baseVehicleRebateVo = data.getRecords().get(0); |
|
|
|
ScmVehRebate scmVehRebate = new ScmVehRebate(); |
|
|
|
scmVehRebate.setState(0); |
|
|
|
scmVehRebate.setCreateBySid(userSid); |
|
|
|
scmVehRebate.setBrandSid(baseVehicleRebateVo.getCarBrand()); |
|
|
|
scmVehRebate.setBrandName(baseVehicleRebateVo.getBrandName()); |
|
|
|
scmVehRebate.setVehModelSid(baseVehicleRebateVo.getModelSid()); |
|
|
|
scmVehRebate.setVehModelName(baseVehicleRebateVo.getVehicleAlias()); |
|
|
|
scmVehRebate.setVehSid(baseVehicleRebateVo.getSid()); |
|
|
|
scmVehRebate.setVinNo(baseVehicleRebateVo.getVinNo()); |
|
|
|
scmVehRebate.setManufactorSettlementPrice(baseVehicleRebateVo.getCostPrice()); |
|
|
|
scmVehRebate.setFreight(baseVehicleRebateVo.getFreight()); |
|
|
|
String dictKey = dictCommonFeign.selectByValue(info.getRebateTypeValue()).getData(); |
|
|
|
scmVehRebate.setRebateTypeKey(dictKey); |
|
|
|
scmVehRebate.setRebateTypeValue(info.getRebateTypeValue()); |
|
|
|
scmVehRebate.setRebateName(info.getRebateName()); |
|
|
|
scmVehRebate.setCalculationStandard(info.getCalculationStandard()); |
|
|
|
scmVehRebate.setEstimateRebate(info.getEstimateRebate()); |
|
|
|
scmVehRebate.setPalceGenDate(info.getPalceGenDate()); |
|
|
|
String useOrgSid = sysStaffOrgFeign.getOrgSidByPath(orgPath).getData(); |
|
|
|
SysOrganizationVo sysOrganizationVo = sysOrganizationFeign.fetchBySid(useOrgSid).getData(); |
|
|
|
scmVehRebate.setCreateOrgSid(useOrgSid); |
|
|
|
scmVehRebate.setCreateOrgName(sysOrganizationVo.getName()); |
|
|
|
scmVehRebate.setUseOrgSid(useOrgSid); |
|
|
|
scmVehRebate.setUseOrgName(sysOrganizationVo.getName()); |
|
|
|
scmVehRebate.setOrgPath(orgPath); |
|
|
|
save(scmVehRebate); |
|
|
|
} |
|
|
|
return rb.success().setMsg("成功导入数据,请点击确定按钮"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private VehRebateExcelInfo getSheetVal(Sheet sheet, int[] resultCell, String userSid) { |
|
|
|
VehRebateExcelInfo importReturn = new VehRebateExcelInfo(); |
|
|
|
List<ScmVehRebateExcelInfo> importVoList = new ArrayList<>(); |
|
|
|
Set<String> checkWord = new HashSet<>(); |
|
|
|
for (int r = 1; r <= sheet.getLastRowNum(); r++) { |
|
|
|
Row row = sheet.getRow(r); |
|
|
|
if (row == null) { |
|
|
|
continue; |
|
|
|
} |
|
|
|
ScmVehRebateExcelInfo importVo = new ScmVehRebateExcelInfo(); |
|
|
|
int physicalNumberOfCells = row.getPhysicalNumberOfCells(); |
|
|
|
if (physicalNumberOfCells < 8) { |
|
|
|
physicalNumberOfCells = 8; |
|
|
|
} |
|
|
|
for (int i = 0; i < physicalNumberOfCells; 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(); |
|
|
|
for (int j = 0; j < resultCell.length; j++) { |
|
|
|
if (i == resultCell[j]) { |
|
|
|
switch (i) { |
|
|
|
case 0: |
|
|
|
importVo.setVinNo(temp); |
|
|
|
break; |
|
|
|
case 1: |
|
|
|
importVo.setRebateTypeValue(temp); |
|
|
|
break; |
|
|
|
case 2: |
|
|
|
importVo.setRebateName(temp); |
|
|
|
break; |
|
|
|
case 3: |
|
|
|
importVo.setCalculationStandard(temp); |
|
|
|
break; |
|
|
|
case 4: |
|
|
|
importVo.setEstimateRebate(temp); |
|
|
|
break; |
|
|
|
case 5: |
|
|
|
importVo.setPalceGenDate(temp); |
|
|
|
break; |
|
|
|
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(importVo); |
|
|
|
} |
|
|
|
if (!importVoList.isEmpty()) { |
|
|
|
for (ScmVehRebateExcelInfo excelInfo : importVoList) { |
|
|
|
if (StringUtils.isBlank(excelInfo.getVinNo())) { |
|
|
|
checkWord.add("车架号不能为空"); |
|
|
|
break; |
|
|
|
} |
|
|
|
if (StringUtils.isNotBlank(excelInfo.getVinNo())){ |
|
|
|
PagerQuery<BaseVehicleRebateQuery> pq = new PagerQuery<>(); |
|
|
|
BaseVehicleRebateQuery params = new BaseVehicleRebateQuery(); |
|
|
|
params.setVinNo(excelInfo.getVinNo()); |
|
|
|
params.setUserSid(userSid); |
|
|
|
pq.setParams(params); |
|
|
|
PagerVo<BaseVehicleRebateVo> data = baseVehicleFeign.vehicleRebateList(pq).getData(); |
|
|
|
if (data.getRecords().size() == 0){ |
|
|
|
checkWord.add("车架号" + excelInfo.getVinNo() + "不存在"); |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
if (StringUtils.isBlank(excelInfo.getRebateTypeValue())) { |
|
|
|
checkWord.add("返利类型不能为空"); |
|
|
|
break; |
|
|
|
} |
|
|
|
if (StringUtils.isNotBlank(excelInfo.getRebateTypeValue())) { |
|
|
|
String dictKey = dictCommonFeign.selectByValue(excelInfo.getRebateTypeValue()).getData(); |
|
|
|
if (StringUtils.isBlank(dictKey)) { |
|
|
|
checkWord.add("车架号" + excelInfo.getVinNo() + "导入的返利类型填写不正确"); |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
if (StringUtils.isBlank(excelInfo.getRebateName())) { |
|
|
|
checkWord.add("返利名称不能为空"); |
|
|
|
break; |
|
|
|
} |
|
|
|
if (StringUtils.isBlank(excelInfo.getCalculationStandard())) { |
|
|
|
checkWord.add("计算标准不能为空"); |
|
|
|
break; |
|
|
|
} |
|
|
|
if (StringUtils.isBlank(excelInfo.getEstimateRebate())) { |
|
|
|
checkWord.add("返利金额不能为空"); |
|
|
|
break; |
|
|
|
} |
|
|
|
if (StringUtils.isBlank(excelInfo.getPalceGenDate())) { |
|
|
|
checkWord.add("所属年月不能为空"); |
|
|
|
break; |
|
|
|
} |
|
|
|
if (StringUtils.isNotBlank(excelInfo.getPalceGenDate())) { |
|
|
|
String palceGenDate = excelInfo.getPalceGenDate(); |
|
|
|
String[] split = palceGenDate.split("-"); |
|
|
|
if (split.length != 2){ |
|
|
|
checkWord.add("车架号" + excelInfo.getVinNo() + "导入的所属年月填写不正确,格式yyyy-MM"); |
|
|
|
break; |
|
|
|
}else if (!isFourDigitNumber(split[0]) || !isTwoDigitNumber(split[1])){ |
|
|
|
checkWord.add("车架号" + excelInfo.getVinNo() + "导入的所属年月填写不正确,格式yyyy-MM"); |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
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()); |
|
|
|
importReturn.setCheckInfo(sbcheck1.toString()); |
|
|
|
importReturn.setInfos(new ArrayList<>()); |
|
|
|
return importReturn; |
|
|
|
} |
|
|
|
importReturn.setInfos(importVoList); |
|
|
|
return importReturn; |
|
|
|
} |
|
|
|
|
|
|
|
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; |
|
|
|
} |
|
|
|
|
|
|
|
public boolean isFourDigitNumber(String input) { |
|
|
|
// 判断输入是否为数字
|
|
|
|
try { |
|
|
|
int number = Integer.parseInt(input); |
|
|
|
} catch (NumberFormatException e) { |
|
|
|
return false; |
|
|
|
} |
|
|
|
// 判断输入是否为四位数
|
|
|
|
if (input.length() != 4) { |
|
|
|
return false; |
|
|
|
} |
|
|
|
return true; |
|
|
|
} |
|
|
|
|
|
|
|
public boolean isTwoDigitNumber(String input) { |
|
|
|
// 判断输入是否为数字
|
|
|
|
try { |
|
|
|
int number = Integer.parseInt(input); |
|
|
|
} catch (NumberFormatException e) { |
|
|
|
return false; |
|
|
|
} |
|
|
|
// 判断输入是否为二位数
|
|
|
|
if (input.length() != 2) { |
|
|
|
return false; |
|
|
|
} |
|
|
|
return true; |
|
|
|
} |
|
|
|
} |