/**
* 导出台账
*/
@RequestMapping(params = "ExportXltz")
@ResponseBody
public void ExportXltz(HttpServletRequest request, ModelMap modelMap, HttpServletResponse response,
OutputStream output) throws UnsupportedEncodingException {
String invoiceno = request.getParameter("invoiceno");//发票号
String sendTime_begin = request.getParameter("sendTime_begin");//发送日期
String sendTime_end = request.getParameter("sendTime_end");//发送日期
String orderSupply = request.getParameter("orderSupply");//代理商
String zdDate_begin = request.getParameter("zdDate_begin");//账单日期
String zdDate_end = request.getParameter("zdDate_end");//账单日期
String declaredate_begin = request.getParameter("declaredate_begin");//申报日期开始时间
String declaredate_end = request.getParameter("declaredate_end");//申报日期结束时间
String wheresql = " ";
if(invoiceno!=null && !invoiceno.equals("")) {
wheresql += " and a.invoice_code='" + invoiceno + "'";
}
if(sendTime_begin!=null && !sendTime_begin.equals("")) {
wheresql += " and a.send_time >='" + sendTime_begin + "'";
}
if(sendTime_end!=null && !sendTime_end.equals("")) {
wheresql += " and a.send_time <='" + sendTime_end + "'";
}
if(orderSupply!=null && !orderSupply.equals("")) {
wheresql += " and c.order_supplyid='" + orderSupply + "'";
}
if(zdDate_begin!=null && !zdDate_begin.equals("")) {
wheresql += " and c.zdDate >='" + zdDate_begin + "'";
}
if(zdDate_end!=null && !zdDate_end.equals("")) {
wheresql += " and c.zdDate <='" + zdDate_end + "'";
}
if(declaredate_begin!=null && !declaredate_begin.equals("")) {
wheresql += " and b.declaration_data >='" + declaredate_begin + "'";
}
if(declaredate_end!=null && !declaredate_end.equals("")) {
wheresql += " and b.declaration_data <='" + declaredate_end + "'";
}
String sql = " select * " +
" from dec_order a " +
" left join dec_main b on (b.erp_No = a.invoice_code)" +
" left join (select Invoiceno,order_supply,order_supplyid,zdDate" +
" from ldc_order_tax " +
" group by Invoiceno) c on (c.Invoiceno = a.invoice_code)"+
wheresql + " order by b.create_date desc ";
String lujing = request.getSession().getServletContext().getRealPath("/");
String lujing1 = lujing + "export\\template\\jkfymx.xlsx";
List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
InputStream in;
try {
in = new FileInputStream(new File(lujing1));
XSSFWorkbook work = null;
work = new XSSFWorkbook(in);
this.ExportXltzOut(request, response, work, maps);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 导出
*/
public void ExportXltzOut(HttpServletRequest request, HttpServletResponse response, XSSFWorkbook work, List<Map<String, Object>> list) {
XSSFSheet sheetAt = work.getSheetAt(0);
XSSFCellStyle setBorder = work.createCellStyle();
setBorder.setBorderBottom(XSSFCellStyle.BORDER_THIN); //下边框
setBorder.setBorderLeft(XSSFCellStyle.BORDER_THIN);//左边框
setBorder.setBorderTop(XSSFCellStyle.BORDER_THIN);//上边框
setBorder.setBorderRight(XSSFCellStyle.BORDER_THIN);//右边框
setBorder.setAlignment(XSSFCellStyle.ALIGN_CENTER); // 水平居中
setBorder.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);//垂直居中
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
Map<String, Object> map = new HashMap<>();
String invoice_code_old = "";
int cnt = 0;
for(int i=0;i<list.size();i++){
if(i<list.size()){
map = list.get(i);
}
String invoice_code = String.valueOf(map.get("invoice_code"));
XSSFRow row = sheetAt.createRow(i+2);
//物流公司名称
if(map.get("order_supply") !=null) {
row.createCell(0).setCellValue(String.valueOf(map.get("order_supply")));
row.getCell(0).setCellStyle(setBorder);
}else {
row.createCell(0).setCellValue("");
row.getCell(0).setCellStyle(setBorder);
}
//进口发票号码
if(map.get("invoice_code") !=null) {
row.createCell(1).setCellValue(String.valueOf(map.get("invoice_code")));
row.getCell(1).setCellStyle(setBorder);
}else {
row.createCell(1).setCellValue("");
row.getCell(1).setCellStyle(setBorder);
}
//到厂日期
JSONObject jsonb = JSONObject.parseObject(String.valueOf(map.get("content")));
if(StringUtils.isNotBlank(jsonb.getString("dcdate"))) {
row.createCell(4).setCellValue(jsonb.getString("dcdate"));
row.getCell(4).setCellStyle(setBorder);
}else {
row.createCell(4).setCellValue("");
row.getCell(4).setCellStyle(setBorder);
}
//报关单号
if(map.get("entry_Id") !=null) {
row.createCell(5).setCellValue(String.valueOf(map.get("entry_Id")));
row.getCell(5).setCellStyle(setBorder);
}else {
row.createCell(5).setCellValue("");
row.getCell(5).setCellStyle(setBorder);
}
//贸易方式
if(StringUtils.isNotBlank(jsonb.getString("tradeMode_value"))) {
row.createCell(6).setCellValue(jsonb.getString("tradeMode_value"));
row.getCell(6).setCellStyle(setBorder);
}else {
row.createCell(6).setCellValue("");
row.getCell(6).setCellStyle(setBorder);
}
//申报日期
if(StringUtils.isNotBlank(jsonb.getString("declarationData"))) {
row.createCell(7).setCellValue(jsonb.getString("declarationData"));
row.getCell(7).setCellStyle(setBorder);
}else {
row.createCell(7).setCellValue("");
row.getCell(7).setCellStyle(setBorder);
}
String str = String.valueOf(map.get("json_extract"));
JSONObject json = JSONObject.parseObject(str);
if(json.containsKey("jsBLorawbNo")){
String jsBLorawbNo = json.getString("jsBLorawbNo");/**B/L OR AWB NO*/
row.createCell(2).setCellValue(jsBLorawbNo);
row.getCell(2).setCellStyle(setBorder);
}else{
row.createCell(2).setCellValue("");
row.getCell(2).setCellStyle(setBorder);
}
if(json.containsKey("jsEta")){
String jsEta = json.getString("jsEta");/**ETA*/
row.createCell(3).setCellValue(jsEta);
row.getCell(3).setCellStyle(setBorder);
}else{
row.createCell(3).setCellValue("");
row.getCell(3).setCellStyle(setBorder);
}
if(json.containsKey("jsHy")){
String jsHy = json.getString("jsHy");/**海运整柜(注明箱型)*/
row.createCell(8).setCellValue(jsHy);
row.getCell(8).setCellStyle(setBorder);
}else{
row.createCell(8).setCellValue("");
row.getCell(8).setCellStyle(setBorder);
}
if(json.containsKey("jsJzxNum")){
String jsJzxNum = json.getString("jsJzxNum");/**集装箱数量*/
row.createCell(9).setCellValue(jsJzxNum);
row.getCell(9).setCellStyle(setBorder);
}else{
row.createCell(9).setCellValue("");
row.getCell(9).setCellStyle(setBorder);
}
if(json.containsKey("jsWeight")){
String jsWeight = json.getString("jsWeight");/**毛重*/
row.createCell(10).setCellValue(jsWeight);
row.getCell(10).setCellStyle(setBorder);
}else{
row.createCell(10).setCellValue("");
row.getCell(10).setCellStyle(setBorder);
}
if(json.containsKey("jsTj")){
String jsTj = json.getString("jsTj");/**体积*/
row.createCell(11).setCellValue(jsTj);
row.getCell(11).setCellStyle(setBorder);
}else{
row.createCell(11).setCellValue("");
row.getCell(11).setCellStyle(setBorder);
}
if(json.containsKey("jsSumfy")){
String jsSumfy = json.getString("jsSumfy");/**物流费用合计金额*/
row.createCell(30).setCellValue(jsSumfy);
row.getCell(30).setCellStyle(setBorder);
}else{
row.createCell(30).setCellValue("");
row.getCell(30).setCellStyle(setBorder);
}
/**关税金额(必须和关税单金额核对)*/
String tariff = "";//关税
String addedTax = "";//增值税
double sumNum = 0;//同发票号关税和
double sumNum1 = 0;//同发票号增值税和
if(jsonb.containsKey("decLists")) {
String string = jsonb.getString("decLists");
JSONArray picArray = JSONArray.parseArray(string);
for(int q =0;q<picArray.size();q++){
JSONObject json1 = picArray.getJSONObject(q);
if(json1.get("tariff")!=null){
sumNum += Double.parseDouble(json1.getString("tariff")); //**关税金额(必须和关税单金额核对)*//*
sumNum1 += Double.parseDouble(json1.getString("addedTax"));
}
}
row.createCell(31).setCellValue(sumNum+" ");
row.getCell(31).setCellStyle(setBorder);
row.createCell(32).setCellValue(sumNum1+" ");
row.getCell(32).setCellStyle(setBorder);
}
if(json.containsKey("jsFybm")){
String jsFybm = json.getString("jsFybm");/**费用部门*/
row.createCell(33).setCellValue(jsFybm);
row.getCell(33).setCellStyle(setBorder);
}else{
row.createCell(33).setCellValue("");
row.getCell(33).setCellStyle(setBorder);
}
String sql = " select * from ldc_order_tax a where a.Invoiceno = '"+invoice_code+"' ";
List<Map<String, Object>> list1 = jdbcTemplate.queryForList(sql);
for(int j=12;j<31;j++){
row.createCell(j).setCellValue("");
}
for(int k=0;k<list1.size();k++){
Map<String, Object> map1 = new HashMap<>();
if(k<list1.size()){
map1 = list1.get(k);
}
if(map1.get("order_tax_name")!=null){
String order_tax_name = String.valueOf(map1.get("order_tax_name"));
String order_tax = String.valueOf(map1.get("order_tax"));
if(map1.get("order_tax")!=null){
order_tax = String.valueOf(map1.get("order_tax"));
}else{
order_tax = "";
}
if("报关费".equals(order_tax_name)){
row.createCell(12).setCellValue(order_tax);
}
if("换单费".equals(order_tax_name)) {
row.createCell(13).setCellValue(order_tax);
}
if("查验费".equals(order_tax_name)) {
row.createCell(14).setCellValue(order_tax);
}
if("港杂费".equals(order_tax_name)) {
row.createCell(15).setCellValue(order_tax);
}
if("THC".equals(order_tax_name)) {
row.createCell(16).setCellValue(order_tax);
}
if("LSSBAFCAF".equals(order_tax_name.trim())) {
row.createCell(17).setCellValue(order_tax);
}
if("报检费安保费".equals(order_tax_name)) {
row.createCell(18).setCellValue(order_tax);
}
if("换单代理费".equals(order_tax_name)) {
row.createCell(19).setCellValue(order_tax);
}
if("三检费".equals(order_tax_name)) {
row.createCell(20).setCellValue(order_tax);
}
if("代垫仓库理货费(港建 理货 搬移 )".equals(order_tax_name)) {
row.createCell(21).setCellValue(order_tax);
}
if("仓储费".equals(order_tax_name)) {
row.createCell(22).setCellValue(order_tax);
}
if("木托销毁".equals(order_tax_name)) {
row.createCell(23).setCellValue(order_tax);
}
if("检验代理费".equals(order_tax_name)) {
row.createCell(24).setCellValue(order_tax);
}
if("拆箱费".equals(order_tax_name)) {
row.createCell(25).setCellValue(order_tax);
}
if("运费".equals(order_tax_name)) {
row.createCell(26).setCellValue(order_tax);
}
if("坏污箱费".equals(order_tax_name)) {
row.createCell(27).setCellValue(order_tax);
}
if("集装箱超期费".equals(order_tax_name)) {
row.createCell(28).setCellValue(order_tax);
}
if("其它".equals(order_tax_name)) {
row.createCell(29).setCellValue(order_tax);
}
if("物流费".equals(order_tax_name)) {
row.createCell(30).setCellValue(order_tax);
}
// if("关税".equals(order_tax_name)) {
// row.createCell(31).setCellValue(order_tax);
// }
// if("增值税".equals(order_tax_name)) {
// row.createCell(32).setCellValue(order_tax);
// }
}
}
if(invoice_code.equals(invoice_code_old)){
cnt++;
if(i==list.size()-1){
//当最后一行时看情况合并
for(int j=0;j<34;j++){
if(j!=4&&j!=5&&j!=6&&j!=7){
row.getCell(j).setCellValue("");
CellRangeAddress region1 = new CellRangeAddress(i-cnt+2, i+2, (short) j, (short) j);
sheetAt.addMergedRegion(region1);
}
}
}
}else{
if(cnt>0){
//合并单元格
for(int j=0;j<34;j++){
if(j!=4&&j!=5&&j!=6&&j!=7){
row.getCell(j).setCellValue("");
CellRangeAddress region1 = new CellRangeAddress(i+2-cnt-1, i-1+2, (short) j, (short) j);
sheetAt.addMergedRegion(region1);
}
}
}
cnt=0;
}
invoice_code_old=invoice_code;
for(int j=12;j<31;j++){
row.getCell(j).setCellStyle(setBorder);
}
}
//合计
XSSFRow row = sheetAt.createRow(list.size()+3);
for (int i = 0; i <34; i++) {
row.createCell(i);
row.getCell(i).setCellStyle(setBorder);
}
row.createCell(0).setCellValue("合计:");
row.getCell(0).setCellStyle(setBorder);
row.getCell(8).setCellStyle(setBorder);
for(int j=12;j<33;j++){
double sum = 0;
for(int i=2;i<list.size()+2;i++){
String value = sheetAt.getRow(i).getCell(j).getStringCellValue();
if(StringUtils.isEmpty(value)){
value="0";
}
sum += Double.parseDouble(value);
}
row.createCell(j).setCellValue(sum);
row.getCell(j).setCellStyle(setBorder);
}
//前台反应
response.reset();
response.setCharacterEncoding("UTF-8");
response.setContentType("application/vnd.ms-excel"); //保证不乱码
try
{
Date date=new Date();
SimpleDateFormat format=new SimpleDateFormat("MMddHHmmss");
String time="bb"+format.format(date)+".xlsx";
response.setHeader("Content-Disposition","attachment;" + " filename=" + new String(time.getBytes("utf-8"), "ISO-8859-1"));
}
catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
try
{
ByteArrayOutputStream oss =new ByteArrayOutputStream();
OutputStream os = response.getOutputStream();
work.write(oss);
byte temp[] = oss.toByteArray();
ByteArrayInputStream in1 = new ByteArrayInputStream(temp);
int n = 0;
while ((n = in1.read(temp)) >0) {
os.write(temp, 0, n);
}
os.flush();
os.close();
} catch(Exception e){
e.printStackTrace();
}
}