1、大理片笼进片任务新增数量校验,当收到进片请求时,拿电气的玻璃数量与mes接收到的数量作比较,相同继续执行,不相同结束本次任务
2、李赛克文件优化,合中空玻璃每个间隔框的类型可能不同,需要在界面上做选择
3、中空设备号与格子号不匹配bug解决
4、自动报工存在接口调用异常,临时将调用接口回退原版本,待最新接口调用无异常后更新接口
5、fixbug:中空大理片详情界面删除接口异常
| | |
| | | List<DamagePrint> damage2=damageService.selectDamagePrintDetails(damage); |
| | | return Result.build(200,"查询成功",damage2); |
| | | } |
| | | @ApiOperation("自动报工") |
| | | @PostMapping("/autoSubmitReport") |
| | | public Result autoSubmitReport(String glassId, int deviceId, String workingProcedure, String remark, int type) { |
| | | damageService.autoSubmitReport(glassId,deviceId,workingProcedure,remark,type); |
| | | return Result.build(200,"查询成功",""); |
| | | } |
| | | |
| | | } |
| | | |
| | |
| | | import com.mes.work_assignment.entity.WorkAssignment; |
| | | import com.mes.work_assignment.mapper.WorkAssignmentMapper; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.lang.StringUtils; |
| | | import org.springframework.beans.BeanUtils; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | |
| | | reportingWork.setOrderId(damages.get(0).getProcessId().substring(0, 10)); |
| | | reportingWork.setProductionId(damages.get(0).getProcessId().substring(0, 11)); |
| | | reportingWork.setProcessId(damages.get(0).getProcessId() + "/" + damages.get(0).getTechnologyNumber()); |
| | | reportingWork.setDeviceName(damages.get(0).getDeviceName()); |
| | | // reportingWork.setDeviceName(damages.get(0).getDeviceName()); |
| | | if (StringUtils.isBlank(damages.get(0).getDeviceName())){ |
| | | reportingWork.setDeviceName("auto"); |
| | | }else{ |
| | | reportingWork.setDeviceName(damages.get(0).getDeviceName()); |
| | | } |
| | | reportingWork.setThisProcess(damages.get(0).getWorkingProcedure()); |
| | | reportingWork.setThisCompletedQuantity(0); |
| | | reportingWork.setThisWornQuantity(0); |
| | |
| | | reportingWork.setOrderId(damage.getProcessId().substring(0, 10)); |
| | | reportingWork.setProductionId(damage.getProcessId().substring(0, 11)); |
| | | reportingWork.setProcessId(damage.getProcessId() + "/" + damage.getTechnologyNumber()); |
| | | reportingWork.setDeviceName(damage.getDeviceName()); |
| | | if (StringUtils.isBlank(damage.getDeviceName())){ |
| | | reportingWork.setDeviceName("auto"); |
| | | }else{ |
| | | reportingWork.setDeviceName(damage.getDeviceName()); |
| | | } |
| | | reportingWork.setThisProcess(damage.getWorkingProcedure()); |
| | | // reportingWork.setNextProcess("磨边"); |
| | | reportingWork.setThisCompletedQuantity(1); |
| | | reportingWork.setThisWornQuantity(0); |
| | | reportingWork.setClasses("早班"); |
| | |
| | | log.info("报工数据reportingWork:{},reportingWorkDetails:{}", reportingWork, reportingWorkDetails); |
| | | try { |
| | | // 目标系统的API URL |
| | | String url = ERP_URL + "/reportingWork/mesReportingWork"; |
| | | // String url = ERP_URL + "/reportingWork/mesReportingWork"; |
| | | String url = ERP_URL + "/reportingWork/mesSaveReportingWorkWorn"; |
| | | URL obj = new URL(url); |
| | | HttpURLConnection con = (HttpURLConnection) obj.openConnection(); |
| | | |
| | |
| | | |
| | | import com.baomidou.mybatisplus.annotation.IdType; |
| | | import com.baomidou.mybatisplus.annotation.TableId; |
| | | import java.time.LocalDateTime; |
| | | import java.io.Serializable; |
| | | |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import lombok.Data; |
| | | import lombok.EqualsAndHashCode; |
| | | |
| | | import java.io.Serializable; |
| | | import java.time.LocalDateTime; |
| | | |
| | | /** |
| | | * <p> |
| | | * |
| | | * |
| | | * </p> |
| | | * |
| | | * @author wu |
| | |
| | | /** |
| | | * <报工主表> |
| | | */ |
| | | @TableId(value = "id", type = IdType.AUTO) |
| | | @TableId(value = "id", type = IdType.AUTO) |
| | | private Long id; |
| | | |
| | | /** |
| | | * 报工编号 |
| | | */ |
| | | private String reportingWorkId; |
| | | private String reportingWorkId = ""; |
| | | |
| | | /** |
| | | * 销售单号 |
| | |
| | | */ |
| | | private String thisProcess; |
| | | |
| | | /** |
| | | * 设备编号 |
| | | */ |
| | | private byte[] deviceId; |
| | | // /** |
| | | // * 设备编号 |
| | | // */ |
| | | // private byte[] deviceId; |
| | | |
| | | /** |
| | | * 设备名称 |
| | |
| | | /** |
| | | * 上工序 |
| | | */ |
| | | private String previousProcess; |
| | | // private String previousProcess; |
| | | |
| | | /** |
| | | * 上工序数量 |
| | | */ |
| | | private Integer previousProcessQuantity; |
| | | // private Integer previousProcessQuantity; |
| | | |
| | | /** |
| | | * 本工序数量 |
| | |
| | | /** |
| | | * 报工状态 |
| | | */ |
| | | private Integer reportingWorkState; |
| | | // private Integer reportingWorkState; |
| | | |
| | | /** |
| | | * 审核人 |
| | | */ |
| | | private String reviewed; |
| | | // private String reviewed; |
| | | |
| | | /** |
| | | * 审核状态(默认0,审核通过1,不通过2,小于0删除) |
| | | */ |
| | | private Integer reviewedState; |
| | | // private Integer reviewedState; |
| | | |
| | | /** |
| | | * 备注 |
| | | */ |
| | | private String notes; |
| | | // private String notes; |
| | | |
| | | /** |
| | | * 质检员 |
| | | */ |
| | | private String qualityInspector; |
| | | // private String qualityInspector; |
| | | |
| | | /** |
| | | * 包装方式 |
| | | */ |
| | | private String packagingMethod; |
| | | // private String packagingMethod; |
| | | |
| | | /** |
| | | * 报工时间 |
| | |
| | | /** |
| | | * 审核时间 |
| | | */ |
| | | private LocalDateTime examineTime; |
| | | // private LocalDateTime examineTime; |
| | | |
| | | /** |
| | | * 质检时间 |
| | | */ |
| | | private LocalDateTime qualityInsTime; |
| | | // private LocalDateTime qualityInsTime; |
| | | |
| | | /** |
| | | * 创建者id |
| | |
| | | return; |
| | | } |
| | | log.info("获取任务的玻璃id:{}", glassIdList); |
| | | ReadWriteEntity countEntity = miloService.readFromOpcUa("DLP1A.DLP1A.glassCount"); |
| | | if (null == countEntity.getValue() || Integer.parseInt(countEntity.getValue() + "") != glassIdList.size()) { |
| | | log.info("当前大车进片玻璃数量{}与mes读取到的数量{}不匹配,结束进片任务", countEntity.getValue(), glassIdList.size()); |
| | | return; |
| | | } |
| | | Map<String, Long> glassCountMap = glassIdList.stream().collect(Collectors.groupingBy(e -> e, Collectors.counting())); |
| | | for (Map.Entry<String, Long> entry : glassCountMap.entrySet()) { |
| | | if (entry.getValue() > 1) { |
| | |
| | | .set(EdgGlassTaskInfo::getState, Const.EDG_GLASS_SUCCESS).in(EdgGlassTaskInfo::getGlassId, glassIdList)); |
| | | //报工 |
| | | for (String glass : glassIdList) { |
| | | damageService.autoSubmitReport(glass, inTaskList.get(0).getStartSlot(), "磨边", "进大理片笼",1); |
| | | damageService.autoSubmitReport(glass, inTaskList.get(0).getStartSlot(), "磨边", "进大理片笼", 1); |
| | | } |
| | | |
| | | Map<String, List<GlassInfo>> glassListMap = glassInfoList.stream().collect(Collectors.groupingBy(GlassInfo::getGlassId)); |
| | |
| | | bigStorageCageDetailsService.updateBySlot(storageCageDTOList, Const.GLASS_STATE_OUT); |
| | | } else { |
| | | bigStorageCageDetailsService.updateBySlot(storageCageDTOList, Const.GLASS_STATE_IN); |
| | | //todo:按照格子信息更新对应的设备id |
| | | //按照格子信息更新对应的设备id |
| | | List<Integer> slotList = storageCageDTOList.stream().map(UpdateBigStorageCageDTO::getTargetSlot).distinct().collect(Collectors.toList()); |
| | | bigStorageCageDetailsService.updateDeviceIdBySlot(slotList); |
| | | |
| | |
| | | private String casThree; |
| | | @ApiModelProperty(value = "气体4(0无 1有) 930专用") |
| | | private String casFour; |
| | | @ApiModelProperty(value = "间隔框类型(tps胶为05 铝间隔条01) 930专用") |
| | | private String intervalFrameType; |
| | | @ApiModelProperty(value = "间隔框宽度 930专用") |
| | | private String intervalFrameWidth; |
| | | @ApiModelProperty(value = "间隔框高度 930专用") |
| | | private String intervalFrameHeight; |
| | | @ApiModelProperty(value = "间隔框类型1(tps胶为05 铝间隔条01) 930专用") |
| | | private String intervalFrameTypeOne; |
| | | @ApiModelProperty(value = "间隔框宽度1 930专用") |
| | | private String intervalFrameWidthOne; |
| | | @ApiModelProperty(value = "间隔框高度1 930专用") |
| | | private String intervalFrameHeightOne; |
| | | @ApiModelProperty(value = "间隔框类型2(tps胶为05 铝间隔条01) 930专用") |
| | | private String intervalFrameTypeTwo; |
| | | @ApiModelProperty(value = "间隔框宽度2 930专用") |
| | | private String intervalFrameWidthTwo; |
| | | @ApiModelProperty(value = "间隔框高度2 930专用") |
| | | private String intervalFrameHeightTwo; |
| | | @ApiModelProperty(value = "间隔框类型3(tps胶为05 铝间隔条01) 930专用") |
| | | private String intervalFrameTypeThree; |
| | | @ApiModelProperty(value = "间隔框宽度3 930专用") |
| | | private String intervalFrameWidthThree; |
| | | @ApiModelProperty(value = "间隔框高度3 930专用") |
| | | private String intervalFrameHeightThree; |
| | | @ApiModelProperty(value = "间隔框类型4(tps胶为05 铝间隔条01) 930专用") |
| | | private String intervalFrameTypeFour; |
| | | @ApiModelProperty(value = "间隔框宽度4 930专用") |
| | | private String intervalFrameWidthFour; |
| | | @ApiModelProperty(value = "间隔框高度4 930专用") |
| | | private String intervalFrameHeightFour; |
| | | /** |
| | | * 创建时间 |
| | | */ |
| | |
| | | @Data |
| | | public class LisecHollowFrameDetails { |
| | | |
| | | public LisecHollowFrameDetails(String recType, String type, String width, String height) { |
| | | this.recType = recType; |
| | | this.type = type; |
| | | this.width = width; |
| | | this.height = height; |
| | | } |
| | | |
| | | private String recType; |
| | | //项目数量指数(如果所有记录相同,则为0) 用0填充即可 |
| | | private String itemInx = "0"; |
| | |
| | | List<BigStorageVO> queryHollowbigStorageCageDetail(); |
| | | |
| | | List<HollowBigStorageCageDetails> querySlotMaxSequence(@Param("flowCardId") String flowCardId, @Param("totalLayer") Integer totalLayer, @Param("layer") Integer layer, @Param("virtualSlot") Integer virtualSlot); |
| | | |
| | | void updateDeviceIdBySlot(@Param("list") List<Integer> slotList); |
| | | } |
| | | |
| | |
| | | List<HollowBigStorageAndDetailsDTO> deleteHollowBigStorageCageDetails(String glassId, Integer deviceId, Integer slot); |
| | | |
| | | List<HollowBigStorageAndDetailsDTO> damageHollowBigStorageCageDetails(String glassId, Integer deviceId, Integer slot, int state); |
| | | |
| | | void updateDeviceIdBySlot(List<Integer> slotList); |
| | | } |
| | | |
| | |
| | | return hollowBigStorageCageDetailsChild(glassId, deviceId, slot, state); |
| | | } |
| | | |
| | | @Override |
| | | public void updateDeviceIdBySlot(List<Integer> slotList) { |
| | | baseMapper.updateDeviceIdBySlot(slotList); |
| | | } |
| | | |
| | | private List<HollowBigStorageAndDetailsDTO> hollowBigStorageCageDetailsChild(String glassId, Integer deviceId, Integer slot, int state) { |
| | | //将对应格子号的玻璃id置为101 |
| | | this.update(new LambdaUpdateWrapper<HollowBigStorageCageDetails>() |
| | |
| | | .eq(HollowBigStorageCageDetails::getSlot, slot) |
| | | .eq(HollowBigStorageCageDetails::getGlassId, glassId) |
| | | ); |
| | | //将流程卡广西表内对应的玻璃信息清除 |
| | | //将流程卡关系表内对应的玻璃信息清除 |
| | | hollowGlassRelationInfoService.update(new LambdaUpdateWrapper<HollowGlassRelationInfo>() |
| | | .set(HollowGlassRelationInfo::getGlassId, null) |
| | | .set(HollowGlassRelationInfo::getTemperingLayoutId, null) |
| | |
| | | Map<Integer, List<HollowGlassRelationInfo>> listMap = hollowGlassRelationInfos.stream().collect(Collectors.groupingBy(HollowGlassRelationInfo::getHollowSequence)); |
| | | |
| | | //设置间隔板数据共所有配对玻璃使用 |
| | | List<LisecHollowFrameDetails> frameList = new ArrayList<>(); |
| | | for (int i = 1; i < relationInfo.getTotalLayer(); i++) { |
| | | LisecHollowFrameDetails frameDetails = new LisecHollowFrameDetails(); |
| | | frameDetails.setRecType("<FR" + i + ">"); |
| | | frameDetails.setType(formulaDetails.getIntervalFrameType()); |
| | | frameDetails.setWidth(formulaDetails.getIntervalFrameWidth()); |
| | | frameDetails.setHeight(formulaDetails.getIntervalFrameHeight()); |
| | | frameList.add(frameDetails); |
| | | } |
| | | |
| | | // for (int i = 1; i < relationInfo.getTotalLayer(); i++) { |
| | | // LisecHollowFrameDetails frameDetails = new LisecHollowFrameDetails(); |
| | | // frameDetails.setRecType("<FR" + i + ">"); |
| | | // frameDetails.setType(formulaDetails.getIntervalFrameType()); |
| | | // frameDetails.setWidth(formulaDetails.getIntervalFrameWidth()); |
| | | // frameDetails.setHeight(formulaDetails.getIntervalFrameHeight()); |
| | | // frameList.add(frameDetails); |
| | | // } |
| | | List<LisecHollowGlassAndFrameDetails> glassAndFrameList = new ArrayList<>(); |
| | | listMap.forEach((e, v) -> { |
| | | LisecHollowGlassAndFrameDetails glassAndFrame = new LisecHollowGlassAndFrameDetails(); |
| | | List<LisecHollowGlassDetails> glassList = new ArrayList<>(); |
| | | List<LisecHollowFrameDetails> frameList = new ArrayList<>(); |
| | | for (int i = 1; i <= v.size(); i++) { |
| | | LisecHollowGlassDetails hollowGlassDetails = new LisecHollowGlassDetails(); |
| | | hollowGlassDetails.setRecType("<GL" + i + ">"); |
| | |
| | | glassList.add(hollowGlassDetails); |
| | | } |
| | | glassAndFrame.setGlassList(glassList); |
| | | glassAndFrame.setFrameList(frameList); |
| | | |
| | | glassAndFrame.setItemNum(e + ""); |
| | | glassAndFrame.setIdNum(e + ""); |
| | | glassAndFrame.setBarcode(randomNumber.substring(randomNumber.length() - 3)); |
| | |
| | | glassAndFrame.setHeight((int) (v.get(0).getHeight() * 10) + ""); |
| | | glassAndFrame.setGlass1(e * ID_RATIO + 1 + ""); |
| | | glassAndFrame.setFrame1(formulaDetails.getFrameOne()); |
| | | frameList.add(new LisecHollowFrameDetails("<FR1",formulaDetails.getIntervalFrameTypeOne(), formulaDetails.getIntervalFrameWidthOne(), formulaDetails.getIntervalFrameHeightOne())); |
| | | glassAndFrame.setGasCode1(formulaDetails.getCasOne()); |
| | | if (relationInfo.getTotalLayer() == 2) { |
| | | glassAndFrame.setGlass2(e * ID_RATIO + 2 + ""); |
| | | } else if (relationInfo.getTotalLayer() == 3) { |
| | | glassAndFrame.setGlass2(e * ID_RATIO + 2 + ""); |
| | | glassAndFrame.setFrame2(formulaDetails.getFrameTwo()); |
| | | frameList.add(new LisecHollowFrameDetails("<FR2",formulaDetails.getIntervalFrameTypeTwo(), formulaDetails.getIntervalFrameWidthTwo(), formulaDetails.getIntervalFrameHeightTwo())); |
| | | glassAndFrame.setGasCode2(formulaDetails.getCasTwo()); |
| | | glassAndFrame.setGlass3(e * ID_RATIO + 3 + ""); |
| | | } else if (relationInfo.getTotalLayer() == 4) { |
| | | glassAndFrame.setGlass2(e * ID_RATIO + 2 + ""); |
| | | glassAndFrame.setFrame2(formulaDetails.getFrameTwo()); |
| | | frameList.add(new LisecHollowFrameDetails("<FR2",formulaDetails.getIntervalFrameTypeTwo(), formulaDetails.getIntervalFrameWidthTwo(), formulaDetails.getIntervalFrameHeightTwo())); |
| | | glassAndFrame.setGasCode2(formulaDetails.getCasTwo()); |
| | | glassAndFrame.setGlass3(e * ID_RATIO + 3 + ""); |
| | | glassAndFrame.setFrame3(formulaDetails.getFrameThree()); |
| | | frameList.add(new LisecHollowFrameDetails("<FR3",formulaDetails.getIntervalFrameTypeThree(), formulaDetails.getIntervalFrameWidthThree(), formulaDetails.getIntervalFrameHeightThree())); |
| | | glassAndFrame.setGasCode3(formulaDetails.getCasThree()); |
| | | glassAndFrame.setGlass4(e * ID_RATIO + 4 + ""); |
| | | } else { |
| | | glassAndFrame.setGlass2(e * ID_RATIO + 2 + ""); |
| | | glassAndFrame.setFrame2(formulaDetails.getFrameTwo()); |
| | | frameList.add(new LisecHollowFrameDetails("<FR2",formulaDetails.getIntervalFrameTypeTwo(), formulaDetails.getIntervalFrameWidthTwo(), formulaDetails.getIntervalFrameHeightTwo())); |
| | | glassAndFrame.setGasCode2(formulaDetails.getCasTwo()); |
| | | glassAndFrame.setGlass3(e * ID_RATIO + 3 + ""); |
| | | glassAndFrame.setFrame3(formulaDetails.getFrameThree()); |
| | | frameList.add(new LisecHollowFrameDetails("<FR3",formulaDetails.getIntervalFrameTypeThree(), formulaDetails.getIntervalFrameWidthThree(), formulaDetails.getIntervalFrameHeightThree())); |
| | | glassAndFrame.setGasCode3(formulaDetails.getCasThree()); |
| | | glassAndFrame.setGlass4(e * ID_RATIO + 4 + ""); |
| | | glassAndFrame.setFrame3(formulaDetails.getFrameFour()); |
| | | frameList.add(new LisecHollowFrameDetails("<FR4",formulaDetails.getIntervalFrameTypeFour(), formulaDetails.getIntervalFrameWidthFour(), formulaDetails.getIntervalFrameHeightFour())); |
| | | glassAndFrame.setGasCode4(formulaDetails.getCasFour()); |
| | | glassAndFrame.setGlass4(e * ID_RATIO + 5 + ""); |
| | | } |
| | | glassAndFrame.setInset(formulaDetails.getSealInsert()); |
| | | glassAndFrame.setFrameList(frameList); |
| | | glassAndFrameList.add(glassAndFrame); |
| | | }); |
| | | details.setGlassAndFrameList(glassAndFrameList); |
| | |
| | | // 将生成的文件存入指定路径 |
| | | //计算生成李赛克需要的数据给到每个属性 |
| | | StringWriter out = new StringWriter(); |
| | | File file = new File("D:\\temp", relationInfo.getFlowCardId() + randomNumber.substring(randomNumber.length() - 3) + ".trf"); |
| | | File file = new File(System.getProperty("user.dir")+"/lisec", relationInfo.getFlowCardId() + randomNumber.substring(randomNumber.length() - 3) + ".trf"); |
| | | try (BufferedWriter writer = new BufferedWriter(new FileWriter(file))) { |
| | | temp.process(root, out); |
| | | writer.write(out.toString()); |
| | |
| | | hollowBigStorageCageDetailsService.updateBySlot(storageCageDTOList, Const.GLASS_STATE_OUT); |
| | | } else { |
| | | hollowBigStorageCageDetailsService.updateBySlot(storageCageDTOList, Const.GLASS_STATE_IN); |
| | | //按照格子信息更新对应的设备id |
| | | List<Integer> slotList = storageCageDTOList.stream().map(UpdateHollowBigStorageCageDTO::getTargetSlot).distinct().collect(Collectors.toList()); |
| | | hollowBigStorageCageDetailsService.updateDeviceIdBySlot(slotList); |
| | | } |
| | | log.info("4、大理片笼进片状态已完成已完成的玻璃信息id:{}", v); |
| | | updateSlotRemainBySlots(outSuccessGlassSlot); |
| | |
| | | and state !=101 |
| | | </where> |
| | | </update> |
| | | <update id="updateDeviceIdBySlot"> |
| | | update big_storage_cage_details t inner join big_storage_cage t1 on t.slot = t1.slot |
| | | set t.device_id = t1.device_id |
| | | where t.slot in ( |
| | | <foreach collection="list" item="item" separator=","> |
| | | #{item} |
| | | </foreach> |
| | | ) |
| | | </update> |
| | | |
| | | <select id="hollowIsAll" resultMap="baseMap"> |
| | | WITH sum_flow_layer_count AS ( SELECT flow_card_id, layer, min( films_id ) AS films_id, min(thickness) as |
| | |
| | | ${details.bthRecType}|${blank.computeBlank(details.bathInfo,10)}|${blank.computeBlank(details.bcdStart,6)}|${blank.computeZero(details.batchNo,8)} |
| | | ${details.ordRecType}|${blank.computeZero(details.ord,10)}|${blank.computeBlank(details.custNum,10)}|${blank.computeBlank(details.custNam,40)}|${blank.computeBlank(details.text1,40)}|${blank.computeBlank(details.text2,40)}|${blank.computeBlank(details.text3,40)}|${blank.computeBlank(details.text4,40)}|${blank.computeBlank(details.text5,40)}|${details.proDate}|${details.delDate}|${blank.computeBlank(details.delArea,10)} |
| | | <#list details.glassAndFrameList as item> |
| | | ${item.recType}|${blank.computeZero(item.itemNum,5)}|${blank.computeBlank(item.idNum,8)}|${blank.computeZero(item.barcode,4)}|${item.qty}|${blank.computeZero(item.width,6)}|${blank.computeZero(item.height,6)}|${blank.computeBlank(item.glass1,9)}|${blank.computeBlank(item.frame1,9)}|${blank.computeBlank(item.glass2,9)}|${blank.computeBlank(item.frame2,9)}|${blank.computeBlank(item.glass3,9)}|${blank.computeBlank(item.frame3,9)}|${blank.computeBlank(item.glass4,9)}|${blank.computeBlank(item.frame4,9)}|${blank.computeBlank(item.glass5,9)}|${blank.computeZero(item.inset,4)}|${blank.computeZero(item.frameTxt,2)}|${blank.computeZero(item.gasCode1,9)}|${blank.computeZero(item.gasCode2,9)}|${blank.computeZero(item.gasCode3,9)}|${blank.computeZero(item.gasCode4,9)}|${blank.computeZero(item.sealType,9)}|${blank.computeZero(item.frahType,1)}|${blank.computeZero(item.frahHoe,6)}|${blank.computeZero(item.pattDir,1)}|${blank.computeZero(item.dguPane,1)} |
| | | ${item.recType}|${blank.computeZero(item.itemNum,5)}|${blank.computeBlank(item.idNum,8)}|${blank.computeZero(item.barcode,4)}|${item.qty}|${blank.computeZero(item.width,6)}|${blank.computeZero(item.height,6)}|${blank.computeBlank(item.glass1,9)}|${blank.computeBlank(item.frame1,9)}|${blank.computeBlank(item.glass2,9)}|${blank.computeBlank(item.frame2,9)}|${blank.computeBlank(item.glass3,9)}|${blank.computeBlank(item.frame3,9)}|${blank.computeBlank(item.glass4,9)}|${blank.computeBlank(item.frame4,9)}|${blank.computeBlank(item.glass5,9)}|${blank.computeZero(item.inset,4)}|${blank.computeZero(item.frameTxt,2)}|${blank.computeZero(item.gasCode1,9)}|${blank.computeZero(item.gasCode2,9)}|${blank.computeZero(item.gasCode3,9)}|${blank.computeZero(item.gasCode4,9)}|${blank.computeZero(item.sealType,9)}|${blank.computeZero(item.frahType,1)}|${blank.computeZero(item.frahHoe,6)}|${blank.computeZero(item.pattDir,1)}|${blank.computeZero(item.dguPane,1)} |
| | | <#list item.glassList as glass> |
| | | ${glass.recType}|${blank.computeZero(glass.itemInx,5)}|${blank.computeBlank(glass.descript,40)}|${blank.computeZero(glass.surface,1)}|${blank.computeZero(glass.thickness,5)}|${blank.computeZero(glass.faceSide,1)}|${blank.computeBlank(glass.ident,10)}|${blank.computeZero(glass.pattDir,1)}|${blank.computeBlank(glass.paneBcd,10)}|${blank.computeZero(glass.prodPane,1)}|${blank.computeZero(glass.prodComp,2)}|${blank.computeZero(glass.gategory,2)} |
| | | ${glass.recType}|${blank.computeZero(glass.itemInx,5)}|${blank.computeBlank(glass.descript,40)}|${blank.computeZero(glass.surface,1)}|${blank.computeZero(glass.thickness,5)}|${blank.computeZero(glass.faceSide,1)}|${blank.computeBlank(glass.ident,10)}|${blank.computeZero(glass.pattDir,1)}|${blank.computeBlank(glass.paneBcd,10)}|${blank.computeZero(glass.prodPane,1)}|${blank.computeZero(glass.prodComp,2)}|${blank.computeZero(glass.gategory,2)} |
| | | </#list> |
| | | <#list item.frameList as frame> |
| | | ${frame.recType}|${blank.computeZero(frame.itemInx,5)}|${blank.computeBlank(frame.descript,40)}|${blank.computeZero(frame.type,2)}|${blank.computeZero(frame.color,2)}|${blank.computeZero(frame.width,5)}|${blank.computeZero(frame.height,5)}|${blank.computeBlank(frame.ident,10)}|${blank.computeBlank(frame.frameBcd,10)} |
| | | ${frame.recType}|${blank.computeZero(frame.itemInx,5)}|${blank.computeBlank(frame.descript,40)}|${blank.computeZero(frame.type,2)}|${blank.computeZero(frame.color,2)}|${blank.computeZero(frame.width,5)}|${blank.computeZero(frame.height,5)}|${blank.computeBlank(frame.ident,10)}|${blank.computeBlank(frame.frameBcd,10)} |
| | | </#list> |
| | | </#list> |