@@ -2,15 +2,19 @@ package org.nl.wms.pdm.service.impl;
import cn.hutool.core.date.DateUtil ;
import cn.hutool.core.io.IoUtil ;
import cn.hutool.core.map.MapUtil ;
import cn.hutool.core.util.IdUtil ;
import cn.hutool.core.util.ObjectUtil ;
import cn.hutool.core.util.StrUtil ;
import cn.hutool.poi.excel.BigExcelWriter ;
import cn.hutool.poi.excel.ExcelUtil ;
import com.alibaba.fastjson.JSON ;
import com.alibaba.fastjson.JSONArray ;
import com.alibaba.fastjson.JSONObject ;
import lombok.RequiredArgsConstructor ;
import lombok.extern.slf4j.Slf4j ;
import org.apache.poi.xssf.streaming.SXSSFSheet ;
import org.nl.modules.common.exception.BadRequestException ;
import org.nl.modules.common.utils.FileUtil ;
import org.nl.modules.common.utils.SecurityUtils ;
@@ -34,7 +38,9 @@ import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service ;
import org.springframework.transaction.annotation.Transactional ;
import javax.servlet.ServletOutputStream ;
import javax.servlet.http.HttpServletResponse ;
import java.io.File ;
import java.io.IOException ;
import java.util.LinkedHashMap ;
import java.util.List ;
@@ -538,63 +544,104 @@ public class WorkorderServiceImpl implements WorkordeService {
return WQLObject . getWQLObject ( " md_me_materialbase " ) . query ( ) . getResultJSONArray ( 0 ) ;
}
@Override
// @Override
// public void downloadExcel(Map<String, Object> params, HttpServletResponse response) {
// String produceorder_code = MapUtil.getStr(params, "produceorder_code");
// String material = MapUtil.getStr(params, "material");
// String begin_time = MapUtil.getStr(params, "begin_time");
// String end_time = MapUtil.getStr(params, "end_time");
// String order_status = MapUtil.getStr(params, "order_status");
// JSONObject map = new JSONObject();
// map.put("flag", "7");
// if (StrUtil.isNotBlank(begin_time)) {
// map.put("begin_time", begin_time + " 00:00:00");
// }
// if (StrUtil.isNotBlank(end_time)) {
// map.put("end_time", end_time + " 23:59:59");
// }
// map.put("region_code", MapUtil.getStr(params, "region_code"));
// if (StrUtil.isNotEmpty(order_status)) {
// order_status = order_status.replace("[\"", "").replace("\"]", "").replace("\"", "");
// }
// map.put("order_status", order_status);
// //处理状态为未完成
// if (StrUtil.isNotEmpty(order_status) && order_status.contains("-1")) {
// map.put("unFinish", "-1");
// map.put("order_status", order_status.replace("-1", ""));
// }
// if (StrUtil.isNotEmpty(produceorder_code)) {
// map.put("produceorder_code", "%" + produceorder_code + "%");
// }
// if (StrUtil.isNotEmpty(material)) {
// map.put("material", "%" + material + "%");
// }
// JSONArray workorders = WQL.getWO("MPS_PRODUCEDURE001").addParamMap(map).process().getResultJSONArray(0);
// List<Map<String, Object>> list = workorders.stream().map(o -> {
// JSONObject workorder = (JSONObject) o;
// Map<String, Object> workorder_map = new LinkedHashMap<>();
// workorder_map.put("工单号", workorder.getString("workorder_code"));
// workorder_map.put("工单状态", workorder.getString("order_status"));
// workorder_map.put("设备", workorder.getString("device_name"));
// workorder_map.put("物料编码", workorder.getString("material_number"));
// workorder_map.put("载具类型", workorder.getString("vehicle_type"));
// workorder_map.put("计划数量", workorder.getString("plan_qty"));
// workorder_map.put("计划生产日期", workorder.getString("plan_date"));
// workorder_map.put("实际开始时间", workorder.getString("realproducestart_date"));
// workorder_map.put("实际结束时间", workorder.getString("realproduceend_date"));
// workorder_map.put("实际生产数量", workorder.getString("real_qty"));
// workorder_map.put("合格数量", workorder.getString("qualified_qty"));
// workorder_map.put("不合格数量", workorder.getString("unqualified_qty"));
// return workorder_map;
// }).collect(Collectors.toList());
//
// try {
// FileUtil.downloadExcel(list, response);
// } catch (IOException e) {
// throw new RuntimeException(e);
// }
// }
@Override
public void downloadExcel ( Map < String , Object > params , HttpServletResponse response ) {
String produceorder_code = MapUtil . getStr ( params , " produceorder_code " ) ;
String material = MapUtil . getStr ( params , " material " ) ;
String begin_time = MapUtil . getStr ( params , " begin_time " ) ;
String end_time = MapUtil . getStr ( params , " end_time " ) ;
String order_status = MapUtil . getStr ( params , " order_status " ) ;
JSONObject map = new JSONObject ( ) ;
map . put ( " flag " , " 7 " ) ;
if ( StrUtil . isNotBlank ( begin_time ) ) {
map . put ( " begin_time " , begin_time + " 00:00:00 " ) ;
}
if ( StrUtil . isNotBlank ( end_time ) ) {
map . put ( " end_time " , end_time + " 23:59:59 " ) ;
}
map . put ( " region_code " , MapUtil . getStr ( params , " region_code " ) ) ;
if ( StrUtil . isNotEmpty ( order_status ) ) {
order_status = order_status . replace ( " [ \" " , " " ) . replace ( " \" ] " , " " ) . replace ( " \" " , " " ) ;
}
map . put ( " order_status " , order_status ) ;
//处理状态为未完成
if ( StrUtil . isNotEmpty ( order_status ) & & order_status . contains ( " -1 " ) ) {
map . put ( " unFinish " , " -1 " ) ;
map . put ( " order_status " , order_status . replace ( " -1 " , " " ) ) ;
}
if ( StrUtil . isNotEmpty ( produceorder_code ) ) {
map . put ( " produceorder_code " , " % " + produceorder_code + " % " ) ;
}
if ( StrUtil . isNotEmpty ( material ) ) {
map . put ( " material " , " % " + material + " % " ) ;
}
JSONArray workorders = WQL . getWO ( " MPS_PRODUCEDURE001 " ) . addParamMap ( map ) . process ( ) . getResultJSONArray ( 0 ) ;
List < Map < String , Object > > list = workorders . stream ( ) . map ( o - > {
JSONObject workorder = ( JSONObject ) o ;
Map < String , Object > workorder_map = new LinkedHashMap < > ( ) ;
workorder_map . put ( " 工单号 " , workorder . getString ( " workorder_code " ) ) ;
workorder_map . put ( " 工单状态 " , workorder . getString ( " order_status " ) ) ;
workorder_map . put ( " 设备 " , workorder . getString ( " device_name " ) ) ;
workorder_map . put ( " 物料编码 " , workorder . getString ( " material_number " ) ) ;
workorder_map . put ( " 载具类型 " , workorder . getString ( " vehicle_type " ) ) ;
workorder_map . put ( " 计划数量 " , workorder . getString ( " plan_qty " ) ) ;
workorder_map . put ( " 计划生产日期 " , workorder . getString ( " plan_date " ) ) ;
workorder_map . put ( " 实际开始时间 " , workorder . getString ( " realproducestart_date " ) ) ;
workorder_map . put ( " 实际结束时间 " , workorder . getString ( " realproduceend_date " ) ) ;
workorder_map . put ( " 实际生产数量 " , workorder . getString ( " real_qty " ) ) ;
workorder_map . put ( " 合格数量 " , workorder . getString ( " qualified_qty " ) ) ;
workorder_map . put ( " 不合格数量 " , workorder . getString ( " unqualified_qty " ) ) ;
return workorder_map ;
} ) . collect ( Collectors . toList ( ) ) ;
try {
FileUtil . downloadExcel ( list , response ) ;
} catch ( IOException e ) {
throw new RuntimeException ( e ) ;
}
/**
* 导出excel
*/
/**
* 系统临时目录
* <br>
* windows 包含路径分割符, 但Linux 不包含,
* 在windows \\==\ 前提下,
* 为安全起见 同意拼装 路径分割符,
* <pre>
* java.io.tmpdir
* windows : C:\Users/xxx\AppData\Local\Temp\
* linux: /temp
* </pre>
*/
public static final String SYS_TEM_DIR = System . getProperty ( " java.io.tmpdir " ) + File . separator ;
public static void downloadExcel ( List < Map < String , Object > > list , HttpServletResponse response ) throws IOException {
String tempPath = SYS_TEM_DIR + IdUtil . fastSimpleUUID ( ) + " .xlsx " ;
File file = new File ( tempPath ) ;
BigExcelWriter writer = ExcelUtil . getBigWriter ( file ) ;
// 一次性写出内容,使用默认样式,强制输出标题
writer . write ( list , true ) ;
SXSSFSheet sheet = ( SXSSFSheet ) writer . getSheet ( ) ;
//上面需要强转SXSSFSheet 不然没有trackAllColumnsForAutoSizing方法
sheet . trackAllColumnsForAutoSizing ( ) ;
//列宽自适应
writer . autoSizeColumnAll ( ) ;
//response为HttpServletResponse对象
response . setContentType ( " application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8 " ) ;
//test.xls是弹出下载对话框的文件名, 不能为中文, 中文请自行编码
response . setHeader ( " Content-Disposition " , " attachment;filename=file.xlsx " ) ;
ServletOutputStream out = response . getOutputStream ( ) ;
// 终止后删除临时文件
file . deleteOnExit ( ) ;
writer . flush ( out , true ) ;
//此处记得关闭输出Servlet流
IoUtil . close ( out ) ;
}
@Override
public void reportWorkOrderDaily ( long workOrderId , int qty , int qualifiedQty , int unqualifiedQty , double weight , double avgPieceWeight ) {
String today = DateUtil . today ( ) ;
@@ -727,4 +774,5 @@ public class WorkorderServiceImpl implements WorkordeService {
TaskUtils . addACSUpdateColum ( workOrder ) ;
workOrderTable . update ( workOrder ) ;
}
}