package com.northglass.service.reportmanage;
|
|
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayOutputStream;
|
import java.io.IOException;
|
import java.io.InputStream;
|
import java.io.OutputStream;
|
import java.sql.Timestamp;
|
import java.text.DecimalFormat;
|
import java.text.ParseException;
|
import java.text.SimpleDateFormat;
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.List;
|
|
import javax.persistence.criteria.CriteriaBuilder;
|
import javax.persistence.criteria.CriteriaQuery;
|
import javax.persistence.criteria.Path;
|
import javax.persistence.criteria.Predicate;
|
import javax.persistence.criteria.Root;
|
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletResponse;
|
|
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
|
import org.apache.poi.hssf.usermodel.HSSFCreationHelper;
|
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
|
import org.apache.poi.hssf.usermodel.HSSFRow;
|
import org.apache.poi.hssf.usermodel.HSSFSheet;
|
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
import org.apache.struts2.util.DateFormatter;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.data.jpa.domain.Specification;
|
import org.springframework.stereotype.Component;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import com.northglass.constants.StateConstants.TaskState;
|
import com.northglass.entity.BreakReport;
|
import com.northglass.entity.LoadMachine;
|
import com.northglass.entity.OptPattern;
|
import com.northglass.entity.ReportTask;
|
import com.northglass.entity.ReportTaskLoad;
|
import com.northglass.repository.BreakReportDao;
|
import com.northglass.repository.RawPackageTxtDao;
|
import com.northglass.repository.ReportTaskDao;
|
import com.northglass.repository.ReportTaskLoadDao;
|
|
@Component
|
@Transactional
|
public class ReportManageService {
|
private static final Logger LOGGER = LoggerFactory.getLogger(ReportManageService.class);
|
|
@Autowired
|
ReportTaskDao reportTaskDao;
|
|
@Autowired
|
BreakReportDao breakReportDao;
|
|
@Autowired
|
RawPackageTxtDao rawPackageTxtDao;
|
|
@Autowired
|
ReportTaskLoadDao reportTaskLoadDao;
|
/**
|
* 进入统计任务界面
|
*/
|
public List<ReportTask> reportTask(Long loadMahcineId){
|
//根据产线获取任务统计清单
|
List<ReportTask> reportTasks = reportTaskDao.findByLoadMachineId(loadMahcineId);
|
List<ReportTask> tasks = new ArrayList<ReportTask>();//放统计整理好的对象
|
List<ReportTask> rTasks = new ArrayList<ReportTask>();//放统计整理好的对象
|
//放不同的opt_name
|
List<String> optNameList = new ArrayList<String>();
|
if(reportTasks.size()!=0){
|
for(int i=0 ; i<reportTasks.size() ; i++){
|
ReportTask reportTask = reportTasks.get(i);
|
String opt_name = reportTask.getOpt_name();
|
int indexOf = optNameList.indexOf(opt_name);
|
if(indexOf!=-1){
|
//说明含有这个opt_name
|
continue;
|
}else{
|
//不含有这个opt_name
|
optNameList.add(opt_name);
|
}
|
}
|
}else{
|
LOGGER.debug("目前1号产线没有统计任务!");
|
return tasks;
|
}
|
if(optNameList.size()!=0){
|
//有任务
|
for(int j = 0; j<optNameList.size() ; j++){
|
//根据optName整理信息
|
String opt_name = optNameList.get(j);
|
List<ReportTask> repTasks = reportTaskDao.findByOptName(opt_name);//根据optName拿到所有的记录
|
int size = repTasks.size();
|
double areas = 0.0;
|
if(size!=0){
|
for(int i = 0; i<size; i++){
|
ReportTask reportTask = repTasks.get(i);
|
String state = reportTask.getState();
|
//Double s= reportTask.getArea();
|
Double area = (double) (reportTask.getOptPattern().getHeight() / 1000)
|
* (double) (reportTask.getOptPattern().getWidth() / 1000);
|
if (area !=null) {
|
areas +=area ;
|
}
|
}
|
DecimalFormat dFormat = new DecimalFormat("######0.0000");
|
ReportTask reportTask = repTasks.get(size-1);//获取最新的那个理由
|
String opt_name2 = reportTask.getOpt_name();
|
Date complete_time = reportTask.getComplete_time();
|
String reson = reportTask.getReson();
|
LoadMachine loadMachine = reportTask.getLoadMachine();
|
OptPattern optPattern = reportTask.getOptPattern();
|
Date create_time = optPattern.getRawPackageTxt().getCreateTime();
|
String state = TaskState.COMPLETED;//默认定义为已完成状态
|
//总片数
|
int sumPieces = rawPackageTxtDao.findByTxtName(reportTask.getOpt_name()).getCount();
|
int CompletePieces = repTasks.size();
|
areas = Double.valueOf(dFormat.format(areas));
|
ReportTask task = new ReportTask(opt_name2, sumPieces,CompletePieces, state, create_time, complete_time, reson, loadMachine, optPattern,areas);
|
task.setOptPattern(reportTask.getOptPattern());
|
if(!tasks.contains(task)){
|
tasks.add(task);
|
}
|
}
|
|
}
|
}
|
if (tasks.size()>0) {
|
for (int i = tasks.size()-1; i >= 0; i--) {
|
rTasks.add(tasks.get(i));
|
}
|
}
|
|
|
return rTasks;
|
}
|
|
/**
|
* 通过optname查看详细完成情况
|
*/
|
public List<ReportTask> lookDetailsByOptname(HttpServletRequest request){
|
String optName = request.getParameter("optname");//拿到点击的那个optname
|
List<ReportTask> reportTasks = reportTaskDao.findByOptName(optName);
|
return reportTasks;
|
}
|
|
/**
|
* 查看破损统计
|
*/
|
public List<BreakReport> breakReport(String loadMachineNumber){
|
List<BreakReport> breakReports = breakReportDao.findAllByLoadMachineId(loadMachineNumber);
|
return breakReports;
|
}
|
|
/**
|
* 查询统计信息
|
* @return
|
* @throws ParseException
|
*/
|
public List<ReportTask> selectReport(HttpServletRequest request,long loadMachineNumber) throws ParseException{
|
String optname = request.getParameter("optname");
|
/*String state = request.getParameter("state");*/
|
String starttime = request.getParameter("starttime");//01/02/2017代表2017年1月2号
|
String completetime = request.getParameter("completetime");
|
/*String reason = request.getParameter("reason");*/
|
Date startDate = null ;
|
Date completeDate = null ;
|
//将时间格式化
|
if(starttime!=null && !"".equals(starttime)){
|
//已经确定了格式,直接截取
|
String month = starttime.substring(0, 2);
|
String day = starttime.substring(3, 5);
|
String year = starttime.substring(6, starttime.length());
|
|
//转换成2017-02-01格式
|
String startTime = year+"-"+month+"-"+day;
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
startDate = sdf.parse(startTime);
|
}
|
|
//将时间格式化
|
if(completetime!=null && !"".equals(completetime)){
|
|
String month = completetime.substring(0, 2);
|
String day = completetime.substring(3, 5);
|
String year = completetime.substring(6, completetime.length());
|
|
//转换成2017-02-01格式
|
String completeTime = year+"-"+month+"-"+day;
|
|
//将时间转换成timestemp类型
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
completeDate = sdf.parse(completeTime);
|
}
|
|
List<ReportTask> reportTasks = selectByCondition(loadMachineNumber, optname, startDate, completeDate);
|
return reportTasks;
|
|
|
|
}
|
|
|
/**
|
* 整理集合
|
* @return
|
*/
|
|
public List<ReportTask> clearUp(List<ReportTask> reportTasks,long loadmachineId){
|
List<ReportTask> tasks = new ArrayList<ReportTask>();//放统计整理好的对象
|
|
//放不同的opt_name
|
List<String> optNameList = new ArrayList<String>();
|
|
if(reportTasks.size()!=0){
|
for(int i=0 ; i<reportTasks.size() ; i++){
|
ReportTask reportTask = reportTasks.get(i);
|
String opt_name = reportTask.getOpt_name();
|
int indexOf = optNameList.indexOf(opt_name);
|
if(indexOf!=-1){
|
//说明含有这个opt_name
|
continue;
|
}else{
|
//不含有这个opt_name
|
optNameList.add(opt_name);
|
}
|
}
|
}else{
|
LOGGER.debug("目前产线"+loadmachineId+"在当前条件下没有统计任务!");
|
return tasks;
|
}
|
|
if(optNameList.size()!=0){
|
//有任务
|
for(int j = 0; j<optNameList.size() ; j++){
|
//根据optName整理信息
|
String opt_name = optNameList.get(j);
|
|
Double areas = 0.0;
|
List<ReportTask> repTasks= new ArrayList<ReportTask>();;
|
for(ReportTask repTask: reportTasks){
|
if(repTask.getOpt_name().equals(opt_name)){
|
repTasks.add(repTask);
|
}
|
}
|
//List<ReportTask> repTasks = reportTaskDao.findByOptName(opt_name);//根据optName拿到所有的记录
|
int size = repTasks.size();
|
if(size!=0){
|
for(int i = 0; i<size; i++){
|
ReportTask reportTask = repTasks.get(i);
|
String state = reportTask.getState();
|
Double area = (double) (reportTask.getOptPattern().getHeight() / 1000)
|
* (double) (reportTask.getOptPattern().getWidth() / 1000);
|
if (area !=null) {
|
areas +=area ;
|
}
|
}
|
DecimalFormat dFormat = new DecimalFormat("######0.0000");
|
areas = Double.valueOf(dFormat.format(areas));
|
ReportTask reportTask = repTasks.get(size-1);//获取最新的那个理由
|
String opt_name2 = reportTask.getOpt_name();
|
Date complete_time = reportTask.getComplete_time();
|
String reson = reportTask.getReson();
|
LoadMachine loadMachine = reportTask.getLoadMachine();
|
OptPattern optPattern = reportTask.getOptPattern();
|
Date create_time = optPattern.getRawPackageTxt().getCreateTime();
|
String state = TaskState.COMPLETED;//默认定义为已完成状态
|
//总片数
|
int sumPieces = rawPackageTxtDao.findByTxtName(reportTask.getOpt_name()).getCount();
|
int CompletePieces = repTasks.size();
|
ReportTask task = new ReportTask(opt_name2, sumPieces,CompletePieces, state, create_time, complete_time, reson, loadMachine, optPattern,areas);
|
task.setOptPattern(reportTask.getOptPattern());
|
if(!tasks.contains(task)){
|
tasks.add(task);
|
}
|
}
|
|
}
|
}
|
|
return tasks;
|
}
|
|
/**
|
* 根据条件查询(工具方法)
|
* @return
|
*/
|
public List<ReportTask> selectByCondition(long loadMachineId,String optname,Date startDate,Date completeDate){
|
List<ReportTask> reportTasks;
|
if((optname!=null && !"".equals(optname)) && (startDate==null || "".equals(startDate))
|
&& (completeDate==null || "".equals(completeDate))){
|
reportTasks = reportTaskDao.findReportTasksByOptName(loadMachineId, optname);
|
reportTasks = clearUp(reportTasks, loadMachineId);
|
}
|
else if((optname==null || "".equals(optname))&& (startDate!=null && !"".equals(startDate))
|
&& (completeDate==null || "".equals(completeDate))){
|
reportTasks = reportTaskDao.findReportTasksBystartTime(loadMachineId, startDate);
|
reportTasks = clearUp(reportTasks, loadMachineId);
|
}
|
else if((optname==null || "".equals(optname))&& (startDate==null || "".equals(startDate))
|
&& (completeDate!=null && !"".equals(completeDate))){
|
reportTasks = reportTaskDao.findReportTasksByCompleteTime(loadMachineId, completeDate);
|
reportTasks = clearUp(reportTasks, loadMachineId);
|
}
|
else if((optname!=null && !"".equals(optname))&& (startDate!=null && !"".equals(startDate))
|
&& (completeDate==null || "".equals(completeDate))){
|
reportTasks = reportTaskDao.findReportTasksByOptNameAndStartTime(loadMachineId, optname, startDate);
|
reportTasks = clearUp(reportTasks, loadMachineId);
|
}
|
else if((optname!=null && !"".equals(optname))&& (startDate==null || "".equals(startDate))
|
&& (completeDate!=null && !"".equals(completeDate))){
|
reportTasks = reportTaskDao.findReportTasksByOptNameAndCompleteTime(loadMachineId, optname, completeDate);
|
reportTasks = clearUp(reportTasks, loadMachineId);
|
}
|
else if((optname==null || "".equals(optname))&& (startDate!=null && !"".equals(startDate))
|
&& (completeDate!=null && !"".equals(completeDate))){
|
reportTasks = reportTaskDao.findReportTasksByStartTimeAndCompleteTime(loadMachineId, startDate, completeDate);
|
reportTasks = clearUp(reportTasks, loadMachineId);
|
}
|
else if((optname!=null && !"".equals(optname))&& (startDate!=null && !"".equals(startDate))
|
&& (completeDate!=null && !"".equals(completeDate))){
|
reportTasks = reportTaskDao.findReportTasksByOptNameAndStartTimeAndCompleteTime(loadMachineId, optname, startDate, completeDate);
|
reportTasks = clearUp(reportTasks, loadMachineId);
|
}
|
else{
|
reportTasks = reportTaskDao.findReportTasks(loadMachineId);
|
reportTasks = clearUp(reportTasks, loadMachineId);
|
}
|
|
//先在report_task_load表中保存一份记录(以便下载)
|
//清除之前保存记录
|
reportTaskLoadDao.deleteAll();
|
if(reportTasks.size()!=0){
|
for(ReportTask reportTask : reportTasks){
|
LoadMachine loadMachine = reportTask.getLoadMachine();
|
String opt_name = reportTask.getOpt_name();
|
String state2 = reportTask.getState();
|
int piece = reportTask.getPiece();
|
int complete_piece = reportTask.getComplete_piece();
|
Date start_time = reportTask.getStart_time();
|
Date complete_time = reportTask.getComplete_time();
|
String reson = reportTask.getReson();
|
|
ReportTaskLoad reportLoad = new ReportTaskLoad(opt_name, piece, complete_piece, state2, start_time, complete_time, reson, loadMachine);
|
reportTaskLoadDao.save(reportLoad);
|
}
|
}
|
|
return reportTasks;
|
|
}
|
|
|
/**
|
* 生成ByteArrayOutputStream对象
|
* @param request
|
* @return
|
*/
|
public ByteArrayOutputStream generateByteArrayOutputStream(HttpServletRequest request){
|
String loadMachineId = request.getParameter("loadmachineid");
|
Long loadmachineId = null;
|
if(loadMachineId!=null && !"".equals(loadMachineId)){
|
//转换类型
|
loadmachineId = Long.valueOf(loadMachineId);
|
}
|
//创建Excel文件的sheet
|
HSSFWorkbook workBook = new HSSFWorkbook();
|
HSSFSheet sheet = workBook.createSheet("report");
|
HSSFRow row = sheet.createRow(0);
|
//设置表头
|
row.createCell(0).setCellValue("ID");
|
row.createCell(1).setCellValue("OptName");
|
row.createCell(2).setCellValue("State");
|
row.createCell(3).setCellValue("Piece");
|
row.createCell(4).setCellValue("CompletePiece");
|
row.createCell(5).setCellValue("StartTime");
|
row.createCell(6).setCellValue("CompleteTime");
|
row.createCell(7).setCellValue("Reason");
|
//获取仓库中所有使用中的料架
|
List<ReportTaskLoad> ReportTasks = reportTaskLoadDao.findByLoadMachineId(loadmachineId);
|
if(ReportTasks.size()!=0){
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
for(ReportTaskLoad reportTask : ReportTasks){
|
HSSFRow dataRow = sheet.createRow(sheet.getLastRowNum() + 1);
|
dataRow.createCell(0).setCellValue(reportTask.getId());
|
dataRow.createCell(1).setCellValue(reportTask.getOpt_name());
|
dataRow.createCell(2).setCellValue(reportTask.getState());
|
dataRow.createCell(3).setCellValue(reportTask.getPiece());
|
dataRow.createCell(4).setCellValue(reportTask.getComplete_piece());
|
|
String start_time="";
|
if(reportTask.getStart_time()!=null){
|
start_time = sdf.format(reportTask.getStart_time());
|
}
|
dataRow.createCell(5).setCellValue(start_time);
|
|
String complete_time="";
|
if(reportTask.getStart_time()!=null){
|
complete_time = sdf.format(reportTask.getComplete_time());
|
}
|
dataRow.createCell(6).setCellValue(complete_time);
|
|
dataRow.createCell(7).setCellValue(reportTask.getReson());
|
}
|
}
|
|
ByteArrayOutputStream byteOut=new ByteArrayOutputStream();
|
try {
|
workBook.write(byteOut);
|
} catch (IOException e) {
|
// TODO Auto-generated catch block
|
e.printStackTrace();
|
}
|
return byteOut;
|
|
}
|
|
/**
|
* 下载Excel
|
* @param request
|
* @param response
|
*/
|
public void generateExcelFile(HttpServletRequest request,HttpServletResponse response){
|
SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");
|
String fileName = "ReportTask_" + format.format(new Date())+ ".xls";
|
response.setContentType("application/vnd.ms-excel");
|
response.setHeader("Content-Disposition", "attachment;filename="+fileName);
|
|
ByteArrayOutputStream byteOut = generateByteArrayOutputStream(request);
|
InputStream input=new ByteArrayInputStream(byteOut.toByteArray());
|
byte [] buffer=new byte[1024];
|
try {
|
OutputStream outputStream = response.getOutputStream();
|
int len=0;
|
while((len=input.read(buffer))!=-1){
|
outputStream.write(buffer, 0, len);
|
}
|
outputStream.flush();
|
} catch (IOException e) {
|
// TODO Auto-generated catch block
|
e.printStackTrace();
|
}
|
}
|
}
|