应付录入计功能开发
This commit is contained in:
parent
548103e265
commit
e100624e91
|
|
@ -14,12 +14,18 @@ import com.bonus.boot.manager.manager.table.PageTableRequest;
|
||||||
import com.bonus.boot.manager.manager.table.PageTableResponse;
|
import com.bonus.boot.manager.manager.table.PageTableResponse;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import org.apache.poi.ss.usermodel.*;
|
||||||
|
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
|
@ -172,4 +178,287 @@ public class PayableController {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping("/importExcel")
|
||||||
|
@ApiOperation(value = "导入Excel数据")
|
||||||
|
public R importExcel(@RequestParam("file") MultipartFile file) {
|
||||||
|
if (file.isEmpty()) {
|
||||||
|
return R.fail("请选择要导入的Excel文件");
|
||||||
|
}
|
||||||
|
|
||||||
|
try (InputStream is = file.getInputStream()) {
|
||||||
|
Workbook workbook = new XSSFWorkbook(is);
|
||||||
|
Sheet sheet = workbook.getSheetAt(0);
|
||||||
|
|
||||||
|
// 验证Excel模板是否正确
|
||||||
|
String validateResult = validateExcelTemplate(sheet);
|
||||||
|
if (validateResult != null) {
|
||||||
|
return R.fail(validateResult);
|
||||||
|
}
|
||||||
|
|
||||||
|
List<PayableBean> payableList = new ArrayList<>();
|
||||||
|
List<String> errorMsgs = new ArrayList<>();
|
||||||
|
|
||||||
|
// 从第二行开始读取数据(跳过表头)
|
||||||
|
for (int i = 2; i <= sheet.getLastRowNum(); i++) {
|
||||||
|
Row row = sheet.getRow(i);
|
||||||
|
if (row == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
PayableBean payable = new PayableBean();
|
||||||
|
boolean hasError = false;
|
||||||
|
|
||||||
|
// 校验并设置日期
|
||||||
|
String rq = getCellValueAsString(row.getCell(0));
|
||||||
|
if (rq == null || rq.trim().isEmpty()) {
|
||||||
|
errorMsgs.add("第" + (i + 1) + "行:日期不能为空");
|
||||||
|
hasError = true;
|
||||||
|
} else if (!rq.matches("^\\d{4}-\\d{2}-\\d{2}$")) {
|
||||||
|
errorMsgs.add("第" + (i + 1) + "行:日期格式不正确,应为yyyy-MM-dd格式");
|
||||||
|
hasError = true;
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd");
|
||||||
|
sdf.setLenient(false);
|
||||||
|
sdf.parse(rq);
|
||||||
|
payable.setRq(rq);
|
||||||
|
} catch (Exception e) {
|
||||||
|
errorMsgs.add("第" + (i + 1) + "行:无效的日期");
|
||||||
|
hasError = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 校验并设置单号
|
||||||
|
String pzh = getCellValueAsString(row.getCell(1));
|
||||||
|
if (pzh == null || pzh.trim().isEmpty()) {
|
||||||
|
errorMsgs.add("第" + (i + 1) + "行:单号不能为空");
|
||||||
|
hasError = true;
|
||||||
|
} else {
|
||||||
|
payable.setPzh(pzh);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 校验并设置合同名称
|
||||||
|
String htmc = getCellValueAsString(row.getCell(2));
|
||||||
|
if (htmc == null || htmc.trim().isEmpty()) {
|
||||||
|
errorMsgs.add("第" + (i + 1) + "行:合同名称不能为空");
|
||||||
|
hasError = true;
|
||||||
|
} else if (!dao.checkHtmcExists(htmc)) {
|
||||||
|
errorMsgs.add("第" + (i + 1) + "行:合同名称不存在");
|
||||||
|
hasError = true;
|
||||||
|
} else {
|
||||||
|
payable.setHtmc(htmc);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 校验并设置供应商名称
|
||||||
|
String gysmc = getCellValueAsString(row.getCell(3));
|
||||||
|
if (gysmc == null || gysmc.trim().isEmpty()) {
|
||||||
|
errorMsgs.add("第" + (i + 1) + "行:供应商名称不能为空");
|
||||||
|
hasError = true;
|
||||||
|
} else if (!dao.checkGysmcExists(gysmc, htmc)) {
|
||||||
|
errorMsgs.add("第" + (i + 1) + "行:供应商名称不存在或与合同不匹配");
|
||||||
|
hasError = true;
|
||||||
|
} else {
|
||||||
|
payable.setGysmc(gysmc);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 校验并设置商品名称
|
||||||
|
String spmc = getCellValueAsString(row.getCell(4));
|
||||||
|
if (spmc == null || spmc.trim().isEmpty()) {
|
||||||
|
errorMsgs.add("第" + (i + 1) + "行:商品名称不能为空");
|
||||||
|
hasError = true;
|
||||||
|
} else {
|
||||||
|
String spid = dao.getSpidByName(spmc);
|
||||||
|
if (spid == null) {
|
||||||
|
errorMsgs.add("第" + (i + 1) + "行:商品名称不存在");
|
||||||
|
hasError = true;
|
||||||
|
} else {
|
||||||
|
payable.setSpbh(spid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 校验并设置付款账号
|
||||||
|
String accountName = getCellValueAsString(row.getCell(5));
|
||||||
|
if (accountName == null || accountName.trim().isEmpty()) {
|
||||||
|
errorMsgs.add("第" + (i + 1) + "行:付款账号不能为空");
|
||||||
|
hasError = true;
|
||||||
|
} else {
|
||||||
|
Integer accountId = dao.getAccountIdByName(accountName);
|
||||||
|
if (accountId == null) {
|
||||||
|
errorMsgs.add("第" + (i + 1) + "行:付款账号不存在");
|
||||||
|
hasError = true;
|
||||||
|
} else {
|
||||||
|
payable.setAccountId(accountId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 校验并设置金额
|
||||||
|
String je = getCellValueAsString(row.getCell(6));
|
||||||
|
if (je == null || je.trim().isEmpty()) {
|
||||||
|
errorMsgs.add("第" + (i + 1) + "行:金额不能为空");
|
||||||
|
hasError = true;
|
||||||
|
} else if (!je.matches("^[0-9]+(\\.[0-9]{1,2})?$")) {
|
||||||
|
errorMsgs.add("第" + (i + 1) + "行:金额格式不正确");
|
||||||
|
hasError = true;
|
||||||
|
} else {
|
||||||
|
payable.setJe(new BigDecimal(je));
|
||||||
|
}
|
||||||
|
|
||||||
|
// 校验并设置人次
|
||||||
|
String personNum = getCellValueAsString(row.getCell(7));
|
||||||
|
if (personNum == null || personNum.trim().isEmpty()) {
|
||||||
|
errorMsgs.add("第" + (i + 1) + "行:人次不能为空");
|
||||||
|
hasError = true;
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
// 处理可能带有小数点的数字
|
||||||
|
double num = Double.parseDouble(personNum);
|
||||||
|
int intValue = (int) num;
|
||||||
|
if (intValue != num || intValue < 1 || intValue > 999999) {
|
||||||
|
errorMsgs.add("第" + (i + 1) + "行:人次必须为1-999999之间的正整数");
|
||||||
|
hasError = true;
|
||||||
|
} else {
|
||||||
|
payable.setPersonNum(intValue);
|
||||||
|
}
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
errorMsgs.add("第" + (i + 1) + "行:人次必须为1-999999之间的正整数");
|
||||||
|
hasError = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 校验并设置发票号码
|
||||||
|
String fphm = getCellValueAsString(row.getCell(8));
|
||||||
|
if (fphm == null || fphm.trim().isEmpty()) {
|
||||||
|
errorMsgs.add("第" + (i + 1) + "行:发票号码不能为空");
|
||||||
|
hasError = true;
|
||||||
|
} else {
|
||||||
|
payable.setFphm(fphm);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 校验并设置开票金额
|
||||||
|
String kpje = getCellValueAsString(row.getCell(9));
|
||||||
|
if (kpje == null || kpje.trim().isEmpty()) {
|
||||||
|
errorMsgs.add("第" + (i + 1) + "行:开票金额不能为空");
|
||||||
|
hasError = true;
|
||||||
|
} else if (!kpje.matches("^[0-9]+(\\.[0-9]{1,2})?$")) {
|
||||||
|
errorMsgs.add("第" + (i + 1) + "行:开票金额格式不正确");
|
||||||
|
hasError = true;
|
||||||
|
} else {
|
||||||
|
payable.setKpje(new BigDecimal(kpje));
|
||||||
|
}
|
||||||
|
|
||||||
|
// 校验并设置收票摘要
|
||||||
|
String spzy = getCellValueAsString(row.getCell(10));
|
||||||
|
if (spzy == null || spzy.trim().isEmpty()) {
|
||||||
|
errorMsgs.add("第" + (i + 1) + "行:收票摘要不能为空");
|
||||||
|
hasError = true;
|
||||||
|
} else {
|
||||||
|
payable.setSpzy(spzy);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 校验并设置制单人
|
||||||
|
String zdr = getCellValueAsString(row.getCell(11));
|
||||||
|
if (zdr == null || zdr.trim().isEmpty()) {
|
||||||
|
errorMsgs.add("第" + (i + 1) + "行:制单人不能为空");
|
||||||
|
hasError = true;
|
||||||
|
} else {
|
||||||
|
String zdrid = dao.getZdridByName(zdr);
|
||||||
|
if (zdrid == null) {
|
||||||
|
errorMsgs.add("第" + (i + 1) + "行:制单人不存在");
|
||||||
|
hasError = true;
|
||||||
|
} else {
|
||||||
|
payable.setZdr(zdrid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 只有当该行没有错误时才添加到列表
|
||||||
|
if (!hasError) {
|
||||||
|
payableList.add(payable);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 如果有错误信息,返回所有错误信息
|
||||||
|
if (!errorMsgs.isEmpty()) {
|
||||||
|
return R.fail(String.join("\n", errorMsgs));
|
||||||
|
}
|
||||||
|
|
||||||
|
// 没有错误时才进行保存操作
|
||||||
|
// service.batchSave(payableList);
|
||||||
|
for (PayableBean payable : payableList) {
|
||||||
|
service.save(payable);
|
||||||
|
}
|
||||||
|
return R.ok("导入成功");
|
||||||
|
|
||||||
|
} catch (IOException e) {
|
||||||
|
return R.fail("导入失败:" + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 验证Excel模板是否正确
|
||||||
|
* @param sheet Excel工作表
|
||||||
|
* @return 如果模板正确返回null,否则返回错误信息
|
||||||
|
*/
|
||||||
|
private String validateExcelTemplate(Sheet sheet) {
|
||||||
|
// 预期的表头
|
||||||
|
String[] expectedHeaders = {
|
||||||
|
"日期", "单号(凭证号)", "合同名称(项目名称)", "供应商名称",
|
||||||
|
"商品名称", "付款账号", "金额", "人次",
|
||||||
|
"发票号码", "开票金额", "收票摘要", "制单人"
|
||||||
|
};
|
||||||
|
|
||||||
|
// 获取第一行(表头)
|
||||||
|
Row headerRow = sheet.getRow(1);
|
||||||
|
if (headerRow == null) {
|
||||||
|
return "Excel文件格式错误:未找到表头行";
|
||||||
|
}
|
||||||
|
|
||||||
|
// 检查列数是否匹配
|
||||||
|
if (headerRow.getPhysicalNumberOfCells() != expectedHeaders.length) {
|
||||||
|
return "Excel文件格式错误:列数不匹配,请使用正确的导入模板";
|
||||||
|
}
|
||||||
|
|
||||||
|
// 验证每一列的表头
|
||||||
|
for (int i = 0; i < expectedHeaders.length; i++) {
|
||||||
|
Cell cell = headerRow.getCell(i);
|
||||||
|
String headerValue = getCellValueAsString(cell);
|
||||||
|
|
||||||
|
if (headerValue == null || !headerValue.equals(expectedHeaders[i])) {
|
||||||
|
return String.format("Excel文件格式错误:第%d列应为'%s',实际为'%s',请使用正确的导入模板",
|
||||||
|
(i + 1), expectedHeaders[i], headerValue == null ? "空" : headerValue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 检查是否有数据行
|
||||||
|
if (sheet.getLastRowNum() < 1) {
|
||||||
|
return "Excel文件中没有数据";
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getCellValueAsString(Cell cell) {
|
||||||
|
if (cell == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (cell.getCellType()) {
|
||||||
|
case STRING:
|
||||||
|
return cell.getStringCellValue();
|
||||||
|
case NUMERIC:
|
||||||
|
if (DateUtil.isCellDateFormatted(cell)) {
|
||||||
|
return new java.text.SimpleDateFormat("yyyy-MM-dd").format(cell.getDateCellValue());
|
||||||
|
}
|
||||||
|
// 处理数值类型,去掉可能存在的.0后缀
|
||||||
|
double numericValue = cell.getNumericCellValue();
|
||||||
|
if (numericValue == (long) numericValue) {
|
||||||
|
return String.valueOf((long) numericValue);
|
||||||
|
}
|
||||||
|
return String.valueOf(numericValue);
|
||||||
|
case BOOLEAN:
|
||||||
|
return String.valueOf(cell.getBooleanCellValue());
|
||||||
|
case FORMULA:
|
||||||
|
return cell.getCellFormula();
|
||||||
|
default:
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -85,4 +85,14 @@ public interface PayableDao {
|
||||||
List<Integer> getHTIDByMC(String htmc);
|
List<Integer> getHTIDByMC(String htmc);
|
||||||
|
|
||||||
List<PayAccountInfoBean> getBankAccount();
|
List<PayAccountInfoBean> getBankAccount();
|
||||||
|
|
||||||
|
boolean checkHtmcExists(String htmc);
|
||||||
|
|
||||||
|
boolean checkGysmcExists(String gysmc, String htmc);
|
||||||
|
|
||||||
|
String getSpidByName(String spmc);
|
||||||
|
|
||||||
|
Integer getAccountIdByName(String accountName);
|
||||||
|
|
||||||
|
String getZdridByName(String zdr);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -41,6 +41,7 @@ public class PayableServiceImpl implements PayableService {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void save(PayableBean payableBean) {
|
public void save(PayableBean payableBean) {
|
||||||
|
System.err.println(payableBean);
|
||||||
LoginUser loginUser = UserUtil.getLoginUser();
|
LoginUser loginUser = UserUtil.getLoginUser();
|
||||||
String username = loginUser.getUsername();
|
String username = loginUser.getUsername();
|
||||||
String userId = dao.getIdByName(username);
|
String userId = dao.getIdByName(username);
|
||||||
|
|
|
||||||
|
|
@ -134,6 +134,9 @@
|
||||||
<if test="params.zdr != null and params.zdr !='' ">
|
<if test="params.zdr != null and params.zdr !='' ">
|
||||||
and a.zdr like concat ('%',#{params.zdr},'%')
|
and a.zdr like concat ('%',#{params.zdr},'%')
|
||||||
</if>
|
</if>
|
||||||
|
<if test="params.je != null and params.je !='' ">
|
||||||
|
and a.je like concat ('%',#{params.je},'%')
|
||||||
|
</if>
|
||||||
<if test="params.startTime != null and params.startTime !=''and params.endTime != null and params.endTime !='' ">
|
<if test="params.startTime != null and params.startTime !=''and params.endTime != null and params.endTime !='' ">
|
||||||
and a.rq between #{params.startTime} and #{params.endTime}
|
and a.rq between #{params.startTime} and #{params.endTime}
|
||||||
</if>
|
</if>
|
||||||
|
|
@ -331,6 +334,11 @@
|
||||||
<if test="params.zdr != null and params.zdr !='' ">
|
<if test="params.zdr != null and params.zdr !='' ">
|
||||||
and a.zdr like concat ('%',#{params.zdr},'%')
|
and a.zdr like concat ('%',#{params.zdr},'%')
|
||||||
</if>
|
</if>
|
||||||
|
|
||||||
|
<if test="params.je != null and params.je !='' ">
|
||||||
|
and a.je like concat ('%',#{params.je},'%')
|
||||||
|
</if>
|
||||||
|
|
||||||
<if test="params.startTime != null and params.startTime !=''and params.endTime != null and params.endTime !='' ">
|
<if test="params.startTime != null and params.startTime !=''and params.endTime != null and params.endTime !='' ">
|
||||||
and a.rq between #{params.startTime} and #{params.endTime}
|
and a.rq between #{params.startTime} and #{params.endTime}
|
||||||
</if>
|
</if>
|
||||||
|
|
@ -759,6 +767,39 @@
|
||||||
select id,name
|
select id,name
|
||||||
from ca_bm_pay_account_info where IS_ACTIVE = '1'
|
from ca_bm_pay_account_info where IS_ACTIVE = '1'
|
||||||
</select>
|
</select>
|
||||||
|
<select id="checkHtmcExists" resultType="java.lang.Boolean">
|
||||||
|
select DISTINCT count(1)
|
||||||
|
from ca_bm_supplier_info
|
||||||
|
where IS_ACTIVE = '1'
|
||||||
|
and CONTRACT_OR_PRO_NAME = #{htmc}
|
||||||
|
</select>
|
||||||
|
<select id="checkGysmcExists" resultType="java.lang.Boolean">
|
||||||
|
select DISTINCT count(1)
|
||||||
|
from ca_bm_supplier_info
|
||||||
|
where IS_ACTIVE = '1'
|
||||||
|
and CONTRACT_OR_PRO_NAME = #{htmc}
|
||||||
|
and name = #{gysmc}
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="getSpidByName" resultType="java.lang.String">
|
||||||
|
select id
|
||||||
|
from ca_bm_goods_info
|
||||||
|
where IS_ACTIVE = '1'
|
||||||
|
and name = #{spmc}
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="getAccountIdByName" resultType="java.lang.Integer">
|
||||||
|
select id
|
||||||
|
from ca_bm_pay_account_info
|
||||||
|
where IS_ACTIVE = '1'
|
||||||
|
and name = #{accountName}
|
||||||
|
</select>
|
||||||
|
<select id="getZdridByName" resultType="java.lang.String">
|
||||||
|
select id
|
||||||
|
from sys_user
|
||||||
|
where IS_ACTIVE = '1'
|
||||||
|
and username = #{zdr}
|
||||||
|
</select>
|
||||||
|
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
||||||
|
|
@ -272,10 +272,11 @@
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
layui.use(['layer', 'form'], function(){
|
layui.use(['layer', 'form', 'upload'], function(){
|
||||||
layer = layui.layer;
|
layer = layui.layer;
|
||||||
form = layui.form;
|
form = layui.form;
|
||||||
var laydate = layui.laydate;
|
var laydate = layui.laydate;
|
||||||
|
var upload = layui.upload;
|
||||||
// 渲染
|
// 渲染
|
||||||
laydate.render({
|
laydate.render({
|
||||||
elem: '#rq'
|
elem: '#rq'
|
||||||
|
|
|
||||||
|
|
@ -59,11 +59,17 @@
|
||||||
<input id="pzh" type="text" class="layui-input" style="width: 180px " placeholder="请输入单号(凭证号)">
|
<input id="pzh" type="text" class="layui-input" style="width: 180px " placeholder="请输入单号(凭证号)">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="layui-inline">
|
<!--<div class="layui-inline">
|
||||||
<div class="layui-input-inline">
|
<div class="layui-input-inline">
|
||||||
<input id="zdr" type="text" class="layui-input" style="width: 150px" placeholder="请输入制单人">
|
<input id="zdr" type="text" class="layui-input" style="width: 150px" placeholder="请输入制单人">
|
||||||
</div>
|
</div>
|
||||||
|
</div>-->
|
||||||
|
<div class="layui-inline">
|
||||||
|
<div class="layui-input-inline">
|
||||||
|
<input id="je" type="text" class="layui-input" style="width: 150px" placeholder="请输入金额">
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="layui-inline" >
|
<div class="layui-inline" >
|
||||||
<div class="layui-input-inline" style="width: 200px">
|
<div class="layui-input-inline" style="width: 200px">
|
||||||
<select name="accountId" id="accountId" lay-search="">
|
<select name="accountId" id="accountId" lay-search="">
|
||||||
|
|
@ -89,6 +95,19 @@
|
||||||
<button id="exportBt" class="layui-btn" >
|
<button id="exportBt" class="layui-btn" >
|
||||||
下载
|
下载
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
|
<button class="layui-btn" onclick="downloadPayable()">
|
||||||
|
模版下载
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<div class="layui-inline">
|
||||||
|
<input id="payableList" name="excelFile" type="file" class="form-control" style="width: 300px; display: inline;" />
|
||||||
|
<input id="uploadExcel" type="button" style="width: 60px;height: 35px;" value="导入" />
|
||||||
|
<input type="file" id="import-excel" name="image" style="display: none;"/>
|
||||||
|
|
||||||
|
<!-- <button type="button" class="layui-btn layui-btn-normal" id="payableList">选择文件</button>-->
|
||||||
|
<!-- <button type="button" id="uploadExcel" class="layui-btn layui-btn-normal layui-btn-danger" >开始上传</button>-->
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</td>
|
</td>
|
||||||
|
|
@ -164,7 +183,8 @@
|
||||||
gysmc :$('#gysmc').val(),
|
gysmc :$('#gysmc').val(),
|
||||||
spbh :$('#spbh').val(),
|
spbh :$('#spbh').val(),
|
||||||
pzh :$('#pzh').val(),
|
pzh :$('#pzh').val(),
|
||||||
zdr :$('#zdr').val(),
|
// zdr :$('#zdr').val(),
|
||||||
|
je :$('#je').val(),
|
||||||
startTime :$('#startTime').val(),
|
startTime :$('#startTime').val(),
|
||||||
endTime :$('#endTime').val()
|
endTime :$('#endTime').val()
|
||||||
} //post请求必须加where ,post请求需要的参数
|
} //post请求必须加where ,post请求需要的参数
|
||||||
|
|
@ -212,6 +232,11 @@
|
||||||
},
|
},
|
||||||
toolbar: "#toolbar"
|
toolbar: "#toolbar"
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
$("#uploadExcel").click(function () {
|
||||||
|
importExcel();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
function buttonquerygysmc(htmcid) {
|
function buttonquerygysmc(htmcid) {
|
||||||
|
|
@ -344,7 +369,8 @@
|
||||||
gysmc :$('#gysmc').val(),
|
gysmc :$('#gysmc').val(),
|
||||||
spbh :$('#spbh').val(),
|
spbh :$('#spbh').val(),
|
||||||
pzh :$('#pzh').val(),
|
pzh :$('#pzh').val(),
|
||||||
zdr :$('#zdr').val(),
|
// zdr :$('#zdr').val(),
|
||||||
|
je :$('#je').val(),
|
||||||
accountId :$('#accountId').val(),
|
accountId :$('#accountId').val(),
|
||||||
startTime :$('#startTime').val(),
|
startTime :$('#startTime').val(),
|
||||||
endTime :$('#endTime').val()
|
endTime :$('#endTime').val()
|
||||||
|
|
@ -356,7 +382,7 @@
|
||||||
$("#exportBt").click(function () {
|
$("#exportBt").click(function () {
|
||||||
var token = localStorage.getItem("token");
|
var token = localStorage.getItem("token");
|
||||||
var loadingMsg = layer.msg('下载中,请稍候...', {icon: 16, scrollbar: false, time: 0});
|
var loadingMsg = layer.msg('下载中,请稍候...', {icon: 16, scrollbar: false, time: 0});
|
||||||
var url = ctxPath + "/payable/exp?htmc=" + $("#htmc").val().trim()+"&gysmc=" + $("#gysmc").val().trim()+ "&spbh=" + $("#spbh").val().trim()+"&pzh=" + $("#pzh").val().trim()+"&zdr=" + $("#zdr").val().trim()+"&accountId=" + $("#accountId").val().trim()+"&startTime=" + $("#startTime").val().trim()+"&endTime=" + $("#endTime").val().trim()+"&token=" + token;
|
var url = ctxPath + "/payable/exp?htmc=" + $("#htmc").val().trim()+"&gysmc=" + $("#gysmc").val().trim()+ "&spbh=" + $("#spbh").val().trim()+"&pzh=" + $("#pzh").val().trim()+"&je=" + $("#je").val().trim()+"&accountId=" + $("#accountId").val().trim()+"&startTime=" + $("#startTime").val().trim()+"&endTime=" + $("#endTime").val().trim()+"&token=" + token;
|
||||||
var xhr = new XMLHttpRequest();
|
var xhr = new XMLHttpRequest();
|
||||||
xhr.open("get", url, true);
|
xhr.open("get", url, true);
|
||||||
xhr.responseType = "blob"; // 转换流
|
xhr.responseType = "blob"; // 转换流
|
||||||
|
|
@ -376,4 +402,61 @@
|
||||||
};
|
};
|
||||||
xhr.send();
|
xhr.send();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
function downloadPayable() {
|
||||||
|
window.open(ctxPath + "/download/download?filename=应付录入导入模版.xlsx")
|
||||||
|
}
|
||||||
|
|
||||||
|
function importExcel() {
|
||||||
|
var formData = new FormData($('form')[0]);
|
||||||
|
var name = $("#payableList").val();
|
||||||
|
if (name == null || name == "") {
|
||||||
|
layer.msg("请上传正确的Excel表格!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!(name.endsWith(".xls") || name.endsWith(".xlsx") || name.endsWith(".xlsm"))) {
|
||||||
|
layer.msg("请上传正确的Excel表格!");
|
||||||
|
$("#payableList").val("");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
formData.append("file", $("#payableList")[0].files[0]);
|
||||||
|
var idx = layer.msg('正在提交数据,请稍等...', {
|
||||||
|
icon: 16
|
||||||
|
, shade: 0.01
|
||||||
|
, time: '-1'
|
||||||
|
});
|
||||||
|
setTimeout(function () {
|
||||||
|
$.ajax({
|
||||||
|
url: ctxPath + "/payable/importExcel",
|
||||||
|
type: 'POST',
|
||||||
|
async: false,
|
||||||
|
data: formData,
|
||||||
|
timeout: 20000,
|
||||||
|
// 告诉jQuery不要去处理发送的数据
|
||||||
|
processData: false,
|
||||||
|
// 告诉jQuery不要去设置Content-Type请求头
|
||||||
|
contentType: false,
|
||||||
|
success: function (data) {
|
||||||
|
layer.close(idx);
|
||||||
|
if (data.code == 200) {
|
||||||
|
layer.alert("导入成功", {icon: 1});
|
||||||
|
table.reload('menuTable');// 刷新页面
|
||||||
|
} else if(data.code == 400){
|
||||||
|
layer.alert("导入失败,请检查模版", {icon: 2});
|
||||||
|
}else if(data.code == 500){
|
||||||
|
layer.alert(data.msg, {icon: 2});
|
||||||
|
}else {
|
||||||
|
layer.alert("导入失败,请检查模版", {icon: 2});
|
||||||
|
}
|
||||||
|
|
||||||
|
},
|
||||||
|
error: function (XMLHttpRequest, textStatus, errorThrown) {
|
||||||
|
console.log(JSON.stringify(errorThrown));
|
||||||
|
layer.close(idx);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
$("#payableList").val("");
|
||||||
|
}, 1000);
|
||||||
|
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
Loading…
Reference in New Issue