| | |
| | | |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.*; |
| | | import java.util.concurrent.atomic.AtomicInteger; |
| | | import java.util.stream.Collectors; |
| | | |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.alibaba.fastjson2.JSON; |
| | | import com.alibaba.nacos.common.utils.JacksonUtils; |
| | | import com.aps.common.core.utils.DateUtils; |
| | | import com.aps.common.core.utils.bean.BeanUtils; |
| | | import com.aps.common.core.web.domain.AjaxResult; |
| | | import com.aps.common.security.utils.DictUtils; |
| | | import com.aps.common.security.utils.SecurityUtils; |
| | |
| | | import com.aps.core.domain.ApsPlate.ApsPlateProcessStat; |
| | | import com.aps.core.mapper.*; |
| | | import com.aps.system.api.domain.SysDictData; |
| | | import com.fasterxml.jackson.databind.ObjectMapper; |
| | | import com.fasterxml.jackson.databind.node.ObjectNode; |
| | | import jakarta.annotation.Resource; |
| | | import jakarta.servlet.http.HttpServletResponse; |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Data; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.poi.ss.usermodel.*; |
| | | import org.apache.poi.util.IOUtils; |
| | |
| | | |
| | | ApsShop apsShop = new ApsShop(); |
| | | apsShop.setPlantCode(PLANT_CODE); |
| | | |
| | | apsShop.setStatus("1"); |
| | | // 获取车间列表并处理空值 |
| | | List<String> shopList = Optional.ofNullable(shopMapper.selectApsShopList(apsShop)) |
| | | .orElse(Collections.emptyList()) |
| | |
| | | response.setCharacterEncoding("utf-8"); |
| | | |
| | | Map<String, CellStyle> styles = createStyles(wb); |
| | | CellStyle title = styles.get("title"); |
| | | CellStyle titleStyle = styles.get("title"); |
| | | try |
| | | { |
| | | |
| | |
| | | SXSSFSheet sheet = wb.getSheetAt(0); |
| | | /*填写日期列 和 工时列*/ |
| | | SXSSFRow rowTitle = sheet.createRow(0); |
| | | SXSSFCell mainPartNumberTitle = rowTitle.createCell(0); |
| | | mainPartNumberTitle.setCellValue("主件料号"); |
| | | mainPartNumberTitle.setCellStyle(title); |
| | | |
| | | SXSSFCell businessTypeTitle = rowTitle.createCell(1); |
| | | businessTypeTitle.setCellValue("业务类型"); |
| | | businessTypeTitle.setCellStyle(title); |
| | | |
| | | SXSSFCell documentNumberTitle = rowTitle.createCell(2); |
| | | documentNumberTitle.setCellValue("单据号"); |
| | | documentNumberTitle.setCellStyle(title); |
| | | |
| | | SXSSFCell requirementTypeTitle = rowTitle.createCell(3); |
| | | requirementTypeTitle.setCellValue("需求分类"); |
| | | requirementTypeTitle.setCellStyle(title); |
| | | |
| | | SXSSFCell documentStatusTitle = rowTitle.createCell(4); |
| | | documentStatusTitle.setCellValue("单据状态"); |
| | | documentStatusTitle.setCellStyle(title); |
| | | |
| | | SXSSFCell approveDateTitle = rowTitle.createCell(5); |
| | | approveDateTitle.setCellValue("审核时间"); |
| | | approveDateTitle.setCellStyle(title); |
| | | |
| | | SXSSFCell workCenterTitle = rowTitle.createCell(6); |
| | | workCenterTitle.setCellValue("当前工序"); |
| | | workCenterTitle.setCellStyle(title); |
| | | |
| | | SXSSFCell departmentTitle = rowTitle.createCell(7); |
| | | departmentTitle.setCellValue("当前工序负责人"); |
| | | departmentTitle.setCellStyle(title); |
| | | |
| | | SXSSFCell crtPcsStsTitle = rowTitle.createCell(8); |
| | | crtPcsStsTitle.setCellValue("当前工序状态"); |
| | | crtPcsStsTitle.setCellStyle(title); |
| | | |
| | | SXSSFCell nextProcessTitle = rowTitle.createCell(9); |
| | | nextProcessTitle.setCellValue("下一工序"); |
| | | nextProcessTitle.setCellStyle(title); |
| | | Map<Integer, String> FrontTitleMap = initFrontTitle(shopNames); |
| | | FrontTitleMap.forEach((index, titleName) -> { |
| | | createCell(rowTitle, index, titleName, titleStyle); |
| | | }); |
| | | |
| | | |
| | | SXSSFCell nextProcessDeparmentTitle = rowTitle.createCell(10); |
| | | nextProcessDeparmentTitle.setCellValue("下一工序负责人"); |
| | | nextProcessDeparmentTitle.setCellStyle(title); |
| | | |
| | | SXSSFCell itemNumberTitle = rowTitle.createCell(11); |
| | | itemNumberTitle.setCellValue("料号"); |
| | | itemNumberTitle.setCellStyle(title); |
| | | |
| | | SXSSFCell drawingNoTitle = rowTitle.createCell(12); |
| | | drawingNoTitle.setCellValue("图号"); |
| | | drawingNoTitle.setCellStyle(title); |
| | | |
| | | SXSSFCell versionNumberTitle = rowTitle.createCell(13); |
| | | versionNumberTitle.setCellValue("版本号"); |
| | | versionNumberTitle.setCellStyle(title); |
| | | |
| | | SXSSFCell lowNumTitle = rowTitle.createCell(14); |
| | | lowNumTitle.setCellValue("低阶码"); |
| | | lowNumTitle.setCellStyle(title); |
| | | |
| | | |
| | | SXSSFCell productionQuantityTitle = rowTitle.createCell(15); |
| | | productionQuantityTitle.setCellValue("生产数量"); |
| | | productionQuantityTitle.setCellStyle(title); |
| | | |
| | | SXSSFCell planSendDateTitle = rowTitle.createCell(16); |
| | | planSendDateTitle.setCellValue("工单计划下发时间"); |
| | | planSendDateTitle.setCellStyle(title); |
| | | |
| | | |
| | | |
| | | SXSSFCell planEndDayTitle = rowTitle.createCell(17); |
| | | planEndDayTitle.setCellValue("系统完工时间"); |
| | | planEndDayTitle.setCellStyle(title); |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | String firstShopName = shopNames.get(0); |
| | | SXSSFCell firstShopBeginDateTitle = rowTitle.createCell(18); |
| | | firstShopBeginDateTitle.setCellValue(firstShopName+"开工时间"); |
| | | firstShopBeginDateTitle.setCellStyle(title); |
| | | SXSSFCell firstShopEndDateTitle = rowTitle.createCell(19); |
| | | firstShopEndDateTitle.setCellValue(firstShopName+"完工时间"); |
| | | firstShopEndDateTitle.setCellStyle(title); |
| | | |
| | | /*焊接件齐套*/ |
| | | SXSSFCell hanJieQiTaoTitle= rowTitle.createCell(20); |
| | | hanJieQiTaoTitle.setCellValue("焊接件齐套开始时间"); |
| | | hanJieQiTaoTitle.setCellStyle(title); |
| | | |
| | | int i1 = 19; |
| | | |
| | | for (int i = 1; i < shopNames.size(); i++) { |
| | | String shopName = shopNames.get(i); |
| | | SXSSFCell beginDateCell = rowTitle.createCell(i * 2 + i1); |
| | | SXSSFCell endDateCell = rowTitle.createCell(i * 2 + i1+1); |
| | | beginDateCell.setCellValue(shopName+"开工时间"); |
| | | endDateCell.setCellValue(shopName+"完工时间"); |
| | | beginDateCell.setCellStyle(title); |
| | | endDateCell.setCellStyle(title); |
| | | } |
| | | SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| | | for (int i = 0; i < table.size(); i++) { |
| | | ApsPlateProcessShopPlanStat plan = table.get(i); |
| | | |
| | | //JSONObject jsonObject = (JSONObject) JSONObject.toJSON(plan); |
| | | ObjectMapper mapper = new ObjectMapper(); |
| | | ObjectNode node = mapper.valueToTree(plan); |
| | | SXSSFRow dataRow = sheet.createRow(i+1); |
| | | //主件料号 |
| | | SXSSFCell mainPartNumberCell = dataRow.createCell(0); |
| | | mainPartNumberCell.setCellValue(plan.getMainPartNumber()); |
| | | |
| | | //业务类型; |
| | | SXSSFCell businessTypeCell= dataRow.createCell(1); |
| | | businessTypeCell.setCellValue(plan.getBusinessType()); |
| | | LinkedHashMap<String,String> frontTitles= frontTitleName(); |
| | | ArrayList<Map.Entry<String, String>> frontTitlesList = new ArrayList<Map.Entry<String, String>>( |
| | | frontTitles.entrySet()); |
| | | |
| | | //单据号; |
| | | SXSSFCell documentNumberCell = dataRow.createCell(2); |
| | | documentNumberCell.setCellValue(plan.getDocumentNumber()); |
| | | for (int i1 = 0; i1 < frontTitlesList.size(); i1++) { |
| | | |
| | | //需求分类; |
| | | SXSSFCell requirementTypeCell = dataRow.createCell(3); |
| | | requirementTypeCell.setCellValue(plan.getRequirementType()); |
| | | Map.Entry<String, String> entry = frontTitlesList.get(i1); |
| | | String filedKey = entry.getKey(); |
| | | String fieldValue= node.get(filedKey).textValue(); |
| | | createCell(dataRow, i1,fieldValue , null); |
| | | } |
| | | |
| | | // 单据状态 |
| | | SXSSFCell documentStatusCell = dataRow.createCell(4); |
| | | documentStatusCell.setCellValue(plan.getDocumentStatus()); |
| | | |
| | | |
| | | // 审核时间 |
| | | SXSSFCell approveDateCell = dataRow.createCell(5); |
| | | approveDateCell.setCellValue(""); |
| | | |
| | | //当前工序 |
| | | SXSSFCell workCenterCell = dataRow.createCell(6); |
| | | workCenterCell.setCellValue(plan.getWorkCenter()); |
| | | |
| | | //当前工序负责人; |
| | | SXSSFCell departmentCell = dataRow.createCell(7); |
| | | departmentCell.setCellValue(plan.getDepartment()); |
| | | |
| | | /*当前工序状态*/ |
| | | SXSSFCell crtPcsStsCell = dataRow.createCell(8); |
| | | crtPcsStsCell.setCellValue(plan.getOpStatus()); |
| | | |
| | | |
| | | //下一工序 |
| | | SXSSFCell nextProcessCell = dataRow.createCell(9); |
| | | nextProcessCell.setCellValue(plan.getNextOpName()); |
| | | |
| | | //下一工序工序负责人 |
| | | SXSSFCell nextProcessDeparmentCell = dataRow.createCell(10); |
| | | nextProcessDeparmentCell.setCellValue(plan.getNextProcessDeparment()); |
| | | |
| | | //料号 |
| | | SXSSFCell itemNumberCell = dataRow.createCell(11); |
| | | itemNumberCell.setCellValue(plan.getItemNumber()); |
| | | |
| | | // 图号 |
| | | SXSSFCell drawingNoCell = dataRow.createCell(12); |
| | | drawingNoCell.setCellValue(plan.getDrawingNo()); |
| | | |
| | | //版本号 |
| | | SXSSFCell versionNumberCell = dataRow.createCell(13); |
| | | versionNumberCell.setCellValue(plan.getVersionNumber()); |
| | | |
| | | //低阶码 |
| | | SXSSFCell lowNumCell = dataRow.createCell(14); |
| | | lowNumCell.setCellValue(""); |
| | | |
| | | //生产数量 |
| | | SXSSFCell productionQuantityCell = dataRow.createCell(15); |
| | | productionQuantityCell.setCellValue(plan.getProductionQuantity().toString()); |
| | | |
| | | //工单计划下发时间 |
| | | SXSSFCell planSendDateCell = dataRow.createCell(16); |
| | | planSendDateCell.setCellValue(""); |
| | | |
| | | //系统完工时间 |
| | | SXSSFCell planEndDayCell = dataRow.createCell(17); |
| | | planEndDayCell.setCellValue(dateFormat.format(plan.getPlanEndDay())); |
| | | |
| | | |
| | | |
| | | |
| | | SXSSFCell firstShopBeginDateCell = dataRow.createCell(18); |
| | | SXSSFCell firstShopEndDateCell = dataRow.createCell(19); |
| | | |
| | | plan.getDeptPlans().stream().filter(x->x.getShopName().equals(firstShopName)).findFirst().ifPresent(x->{ |
| | | firstShopBeginDateCell.setCellValue(x.getPlanStartDate()); |
| | | firstShopEndDateCell.setCellValue(x.getPlanEndDate()); |
| | | }); |
| | | /*焊接件齐套*/ |
| | | SXSSFCell hanJieQiTaoCell = dataRow.createCell(20); |
| | | hanJieQiTaoCell.setCellValue(""); |
| | | |
| | | |
| | | for (int j = 1; j< shopNames.size(); j++) { |
| | | String shopName = shopNames.get(j); |
| | | SXSSFCell beginDateCell = dataRow.createCell(j * 2 + i1); |
| | | SXSSFCell endDateCell = dataRow.createCell(j * 2 + i1+1); |
| | | int shopBeginIndex = frontTitlesList.size(); |
| | | for (int j = 0; j< shopNames.size(); j++) { |
| | | String shopName = shopNames.get(0); |
| | | SXSSFCell beginDateCell = dataRow.createCell(j * 2 + shopBeginIndex); |
| | | SXSSFCell endDateCell = dataRow.createCell(j * 2 + shopBeginIndex+1); |
| | | plan.getDeptPlans().stream().filter(x->x.getShopName().equals(shopName)).findFirst().ifPresent(x->{ |
| | | beginDateCell.setCellValue(x.getPlanStartDate()); |
| | | endDateCell.setCellValue(x.getPlanEndDate()); |
| | | }); |
| | | } |
| | | LinkedHashMap<String,String> backTitles= backTitleName(); |
| | | ArrayList<Map.Entry<String, String>> backTitlesList = new ArrayList<Map.Entry<String, String>>( |
| | | backTitles.entrySet()); |
| | | |
| | | |
| | | int backBeginIndex = shopBeginIndex+shopNames.size()*2; |
| | | for (int i1 = 0; i1 < backTitlesList.size(); i1++) { |
| | | Map.Entry<String, String> entry = backTitlesList.get(i1); |
| | | String filedKey = entry.getKey(); |
| | | String fieldValue= node.get(filedKey).textValue(); |
| | | createCell(dataRow, i1+backBeginIndex,fieldValue , null); |
| | | } |
| | | |
| | | } |
| | | for (int i = 0; i < rowTitle.getLastCellNum(); i++) { |
| | | |
| | | sheet.setColumnWidth(i, 20 * 256); |
| | | } |
| | | |
| | | wb.write(response.getOutputStream()); |
| | | } |
| | | catch (Exception e) |
| | |
| | | } |
| | | |
| | | } |
| | | |
| | | private LinkedHashMap<String,String> frontTitleName(){ |
| | | |
| | | LinkedHashMap<String,String> map = new LinkedHashMap<>(); |
| | | map.put("mainPartNumber","主件料号"); |
| | | map.put("customer","主件客户"); |
| | | map.put("requireTrackId","建树行"); |
| | | map.put("businessType","业务类型"); |
| | | map.put("documentNumber","单据号"); |
| | | map.put("itemNumber","料号"); |
| | | map.put("drawingNo","图号"); |
| | | map.put("versionNumber","版本号"); |
| | | map.put("lowOrderCode","低阶码"); |
| | | map.put("productionQuantity","生产数量"); |
| | | map.put("requirementType","需求分类"); |
| | | map.put("documentStatus","单据状态"); |
| | | map.put("approveOn","审核时间"); |
| | | map.put("processNumber","工序号"); |
| | | map.put("workCenter","当前工序"); |
| | | map.put("department","当前工序责任人"); |
| | | map.put("opStatus","状态"); |
| | | map.put("nextOpName","下一道工序"); |
| | | map.put("planEndDay","系统完工时间"); |
| | | |
| | | return map; |
| | | } |
| | | private LinkedHashMap<String,String> backTitleName(){ |
| | | LinkedHashMap<String,String> map = new LinkedHashMap<>(); |
| | | |
| | | map.put("orderCreateTime","工单创建时间"); |
| | | map.put("startWorkDate","工单开工时间"); |
| | | map.put("remainedProcess","剩余工序"); |
| | | |
| | | return map; |
| | | } |
| | | |
| | | private Map<Integer,String> initFrontTitle(List<String> shopNames) { |
| | | Map<Integer,String> map = new HashMap<>(); |
| | | Map<String,String> frontTitles= frontTitleName(); |
| | | AtomicInteger index= new AtomicInteger(); |
| | | |
| | | frontTitles.forEach((key,value)->{ |
| | | map.put(index.get(), value); |
| | | index.getAndIncrement(); |
| | | }); |
| | | |
| | | |
| | | for (int i = 0; i < shopNames.size(); i++) { |
| | | map.put(i * 2 + index.get(),shopNames.get(i) + "开始时间"); |
| | | map.put(i * 2 + index.get()+1,shopNames.get(i) + "结束时间"); |
| | | } |
| | | |
| | | Map<String,String> backTitles= backTitleName(); |
| | | |
| | | AtomicInteger begBackIndex= new AtomicInteger(frontTitles.size() + shopNames.size() * 2); |
| | | |
| | | backTitles.forEach((key,value)->{ |
| | | map.put(begBackIndex.get(),value); |
| | | begBackIndex.getAndIncrement(); |
| | | }); |
| | | |
| | | return map; |
| | | } |
| | | |
| | | |
| | | private static void createCell(SXSSFRow rowTitle, int column, String titleName, CellStyle cellStyle) { |
| | | SXSSFCell cell = rowTitle.createCell(column); |
| | | cell.setCellValue(titleName); |
| | | if(null!=cellStyle){ |
| | | cell.setCellStyle(cellStyle); |
| | | } |
| | | } |
| | | |
| | | private Map<String,CellStyle> createStyles(SXSSFWorkbook wb) |
| | | { |
| | | Map<String,CellStyle> styles=new HashMap<>(); |