diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/controller/BstIvtCutpointivtController.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/controller/BstIvtCutpointivtController.java index f60d73277..946b61c9d 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/controller/BstIvtCutpointivtController.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/controller/BstIvtCutpointivtController.java @@ -6,19 +6,29 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.nl.b_lms.bst.ivt.cutpointivt.service.dto.BstIvtCutpointivtQuery; +import org.nl.b_lms.bst.ivt.cutpointivt.service.dto.BstIvtCutpointivtVo; +import org.nl.b_lms.bst.ivt.cutpointivt.service.dto.SubInfo; +import org.nl.b_lms.pdm.bi.slittingproductionplan.service.IPdmBiSlittingproductionplanService; +import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.PdmBiSlittingproductionplan; import org.nl.common.TableDataInfo; import org.nl.common.domain.query.PageQuery; import org.nl.modules.logging.annotation.Log; import org.nl.b_lms.bst.ivt.cutpointivt.service.IBstIvtCutpointivtService; import org.nl.b_lms.bst.ivt.cutpointivt.service.dao.BstIvtCutpointivt; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.util.CollectionUtils; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import java.util.Map; -import java.util.Set; +import java.math.BigDecimal; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collector; +import java.util.stream.Collectors; + /** * @author lyd * @date 2024-02-26 @@ -30,6 +40,8 @@ public class BstIvtCutpointivtController { @Autowired private IBstIvtCutpointivtService bstIvtCutpointivtService; + @Autowired + private IPdmBiSlittingproductionplanService iPdmBiSlittingproductionplanService; @GetMapping @Log("查询分切区缓存点位库存") @@ -74,6 +86,50 @@ public class BstIvtCutpointivtController { if (StringUtils.isNotEmpty(暂存架区域)){ queryWrapper.eq("point_type", 暂存架区域); } - return new ResponseEntity<>(bstIvtCutpointivtService.list(queryWrapper),HttpStatus.OK); + List list = bstIvtCutpointivtService.list(queryWrapper); + ArrayList qzzs = new ArrayList<>(); + for (BstIvtCutpointivt cutpointivt : list) { + String qzzNo1 = cutpointivt.getQzz_no1(); + String qzzNo2 = cutpointivt.getQzz_no2(); + if (StringUtils.isNotEmpty(qzzNo1)){qzzs.add(qzzNo1);}; + if (StringUtils.isNotEmpty(qzzNo2)){qzzs.add(qzzNo2);}; + } + List slit = iPdmBiSlittingproductionplanService.list(new QueryWrapper() + .select("qzzno","container_name", "split_breadth", "split_height", "split_weight") + .eq("is_delete", "0") + .ne("description","虚拟卷") + .in("qzzno", qzzs)); + Map> slitMap = slit.stream().collect(Collectors.groupingBy(PdmBiSlittingproductionplan::getQzzno)); + List result = new ArrayList<>(); + for (BstIvtCutpointivt cutpointivt : list) { + BstIvtCutpointivtVo vo = new BstIvtCutpointivtVo(); + vo.setQzz_no1(cutpointivt.getQzz_no1()); + vo.setQzz_no2(cutpointivt.getQzz_no2()); + vo.setPoint_type(cutpointivt.getPoint_type()); + vo.setPoint_code(cutpointivt.getPoint_code()); + vo.setPoint_status(cutpointivt.getPoint_status()); + vo.setProduct_area(cutpointivt.getProduct_area()); + vo.setUpdate_time(cutpointivt.getUpdate_time()); + Map> subInfo = new HashMap<>(); + if (StringUtils.isNotEmpty(cutpointivt.getQzz_no1())){ + List qzz1 = slitMap.get(cutpointivt.getQzz_no1()); + if (!CollectionUtils.isEmpty(qzz1)){ + List collect = qzz1.stream() + .map(sub -> sub.getContainer_name()+"幅宽"+sub.getSplit_breadth().intValue()+"长度"+sub.getSplit_height().intValue()).collect(Collectors.toList()); + subInfo.put(cutpointivt.getQzz_no1(),collect); + } + } + if (StringUtils.isNotEmpty(cutpointivt.getQzz_no2())){ + List qzz2 = slitMap.get(cutpointivt.getQzz_no2()); + if (!CollectionUtils.isEmpty(qzz2)){ + List collect = qzz2.stream() + .map(sub -> sub.getContainer_name()+"幅宽"+sub.getSplit_breadth().intValue()+"长度"+sub.getSplit_height().intValue()).collect(Collectors.toList()); + subInfo.put(cutpointivt.getQzz_no2(),collect); + } + } + vo.setSubInfo(subInfo); + result.add(vo); + } + return new ResponseEntity<>(result,HttpStatus.OK); } } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/dto/BstIvtCutpointivtVo.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/dto/BstIvtCutpointivtVo.java new file mode 100644 index 000000000..533ab1b0c --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/dto/BstIvtCutpointivtVo.java @@ -0,0 +1,20 @@ +package org.nl.b_lms.bst.ivt.cutpointivt.service.dto; + +import lombok.Data; +import org.nl.b_lms.bst.ivt.cutpointivt.service.dao.BstIvtCutpointivt; + +import java.util.List; +import java.util.Map; + +/** + * @description / + * @author lyd + * @date 2024-02-26 + **/ +@Data +public class BstIvtCutpointivtVo extends BstIvtCutpointivt { + /** + * 气胀轴子卷信息 + */ + private Map> subInfo; +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/dto/SubInfo.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/dto/SubInfo.java new file mode 100644 index 000000000..2a2a439f7 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/dto/SubInfo.java @@ -0,0 +1,30 @@ +package org.nl.b_lms.bst.ivt.cutpointivt.service.dto; + +import lombok.Builder; +import lombok.Data; + +/** + * @description / + * @author lyd + * @date 2024-02-26 + **/ +@Data +@Builder +public class SubInfo { + /** + * 气胀轴子卷号 + */ + private String container_name; + /** + * 子卷幅宽 + */ + private Integer split_breadth; + /** + * 子卷长度 + */ + private Integer split_height; + /** + * 子卷重量 + */ + private Integer split_weight; +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/dao/mapper/PdmBiSubpackagerelationMapper.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/dao/mapper/PdmBiSubpackagerelationMapper.java index b16f3a2d4..70e3daa55 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/dao/mapper/PdmBiSubpackagerelationMapper.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/dao/mapper/PdmBiSubpackagerelationMapper.java @@ -34,4 +34,6 @@ public interface PdmBiSubpackagerelationMapper extends BaseMapper getStructInfoBySZLS(); + List recordQuery(List pcns); + } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/dao/mapper/PdmBiSubpackagerelationMapper.xml b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/dao/mapper/PdmBiSubpackagerelationMapper.xml index f3c329e3a..1bf20fa00 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/dao/mapper/PdmBiSubpackagerelationMapper.xml +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/dao/mapper/PdmBiSubpackagerelationMapper.xml @@ -113,6 +113,13 @@ + diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/service/IpdmBiSubpackagerelationService.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/service/IpdmBiSubpackagerelationService.java index b2c536485..cd31d6e86 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/service/IpdmBiSubpackagerelationService.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/service/IpdmBiSubpackagerelationService.java @@ -132,6 +132,8 @@ public interface IpdmBiSubpackagerelationService extends IService getStructInfoBySZLS(); + List recordQuery(List pcsn); + } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/service/impl/PdmBiSubpackagerelationServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/service/impl/PdmBiSubpackagerelationServiceImpl.java index fd25a9ebc..757b8d2a0 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/service/impl/PdmBiSubpackagerelationServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/service/impl/PdmBiSubpackagerelationServiceImpl.java @@ -795,6 +795,10 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl recordQuery(List pcsn) { + return this.baseMapper.recordQuery(pcsn); + } @Override public void boxReturn(JSONObject whereJson) { diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/service/impl/BstIvtPackageinfoivtServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/service/impl/BstIvtPackageinfoivtServiceImpl.java index 1d8af7108..291a381fa 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/service/impl/BstIvtPackageinfoivtServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/service/impl/BstIvtPackageinfoivtServiceImpl.java @@ -126,7 +126,9 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl containers = records.stream().map(BstIvtPackageinfoivt::getContainer_name).filter(a->StringUtils.isNotEmpty(a)).collect(Collectors.toSet()); Map listMap = new HashMap(); if (!CollectionUtils.isEmpty(containers)){ - List containerInfo = iPdmBiSlittingproductionplanService.list(new QueryWrapper().in("container_name", containers).select("container_name", "weight", "paper_weight")); + List containerInfo = iPdmBiSlittingproductionplanService.list(new QueryWrapper() + .in("container_name", containers) + .select("container_name", "weight", "paper_weight","split_breadth","split_height")); listMap = containerInfo.stream().collect(HashMap::new,(m, o) -> m.put(o.getContainer_name(),o), HashMap::putAll); } List voRecords = new ArrayList<>(); @@ -1003,7 +1005,7 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl dtoList; UpdateWrapper updateWrapper = new UpdateWrapper<>(); //LMS获取MES称重后子卷信息 diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutBoxTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutBoxTask.java index bb26d5482..c6480faa0 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutBoxTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutBoxTask.java @@ -68,29 +68,18 @@ public class TwoOutBoxTask extends AbstractAcsTask { /* * 下发给ACS时需要特殊处理 */ - // 任务表 - WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); - // 装箱点位库存表 - WQLObject packTab = WQLObject.getWQLObject("bst_ivt_packageinfoivt"); - - JSONArray arr = taskTab.query("handle_class = '" + THIS_CLASS + "' and task_status = '" + TaskStatusEnum.START_AND_POINT.getCode() + "' and is_delete ='0' order by create_time").getResultJSONArray(0); - // 判断当前有多少个正在执行中的任务 - int num = taskTab.query("handle_class = '" + THIS_CLASS + "' and task_status IN ('05','06') and is_delete ='0'") + int num = WQLObject.getWQLObject("SCH_BASE_Task").query("handle_class = '" + THIS_CLASS + "' and task_status IN ('05','06') and is_delete ='0'") .getResultJSONArray(0).size(); - - // 查询装箱对接位是否有木箱 - JSONObject jsonPack = packTab.query("point_code = '" + PackageInfoIvtEnum.PACK_POINT.code("装箱对接位01") + "' AND is_used = '1'").uniqueResult(0); - if (ObjectUtil.isNotEmpty(jsonPack.getString("container_name"))) { - num += 1; - } ArrayList resultList = new ArrayList<>(); // 如果缓存了4个箱子则不下发任务 - if (num >= 3) { + if (num >= 2) { return resultList; } + + JSONArray arr = WQLObject.getWQLObject("SCH_BASE_Task").query("handle_class = '" + THIS_CLASS + "' and task_status = '" + TaskStatusEnum.START_AND_POINT.getCode() + "' and is_delete ='0' order by create_time").getResultJSONArray(0); for (int i = 0; i < arr.size(); i++) { - if (num >= 3) { + if (num >= 2) { break; } JSONObject json = arr.getJSONObject(i); @@ -142,7 +131,6 @@ public class TwoOutBoxTask extends AbstractAcsTask { .remark(json.getString("remark")) .build(); resultList.add(dto); - num += 1; } return resultList; @@ -151,33 +139,32 @@ public class TwoOutBoxTask extends AbstractAcsTask { @Override @Transactional(rollbackFor = Exception.class) public void updateTaskStatus(JSONObject taskObj, String status) { - // 仓位表 WQLObject attrTab = WQLObject.getWQLObject("st_ivt_structattr"); - // 仓位表 WQLObject packageinfoivt = WQLObject.getWQLObject("bst_ivt_packageinfoivt"); - // 任务表 WQLObject taskTab = WQLObject.getWQLObject("sch_base_task"); - JSONObject jsonTask = taskTab.query("task_id = '" + taskObj.getString("task_id") + "'").uniqueResult(0); - // 更新任务的参数 JSONObject map = new JSONObject(); - /* * 1-执行中, 2-完成 ,0-acs取消 */ // 执行中 if (status.equals(TaskStatusEnum.EXECUTING.getCode())) { - map.put("task_status", TaskStatusEnum.EXECUTING.getCode()); + }else if (status.equals(IOSEnum.IS_NOTANDYES.code("否"))) { + map.put("is_delete", IOSEnum.IS_NOTANDYES.code("是")); + }else { + map.put("task_status", TaskStatusEnum.FINISHED.getCode()); } - + map.put("update_optid", SecurityUtils.getCurrentUserId()); + map.put("update_optname", SecurityUtils.getCurrentNickName()); + map.put("update_time", DateUtil.now()); + WQLObject.getWQLObject("SCH_BASE_Task").update(map, "task_id = '" + taskObj.getString("task_id") + "'"); // 完成 if (status.equals(TaskStatusEnum.FINISHED.getCode())) { - map.put("task_status", TaskStatusEnum.FINISHED.getCode()); // 更新仓位 JSONObject jsonAttr = attrTab.query("struct_code = '" + jsonTask.getString("point_code1") + "'").uniqueResult(0); jsonAttr.put("lock_type", IOSEnum.LOCK_TYPE.code("未锁定")); @@ -188,11 +175,11 @@ public class TwoOutBoxTask extends AbstractAcsTask { packageInfo.put("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空载具")); packageInfo.put("container_name",jsonTask.getString("vehicle_code")); packageinfoivt.update(packageInfo); - //更新木箱信息 - // packageinfoivtService.update(new LambdaUpdateWrapper() - // .eq(BstIvtPackageinfoivt::getPoint_code, jsonTask.getString("point_code2")) - // .set(BstIvtPackageinfoivt::getIvt_status, PackageInfoIvtEnum.IVT_STATUS.code("空载具")) - // .set(BstIvtPackageinfoivt::getContainer_name, jsonTask.getString("vehicle_code"))); + RedissonUtils.lock(c->{ + if (status.equals(TaskStatusEnum.FINISHED.getCode())) { + immediateNotifyAcs(null); + } + },"zjInBound",20,this); } // 取消 if (status.equals(IOSEnum.IS_NOTANDYES.code("否"))) { @@ -206,15 +193,6 @@ public class TwoOutBoxTask extends AbstractAcsTask { jsonAttr.put("lock_type", IOSEnum.LOCK_TYPE.code("未锁定")); attrTab.update(jsonAttr); } - map.put("update_optid", SecurityUtils.getCurrentUserId()); - map.put("update_optname", SecurityUtils.getCurrentNickName()); - map.put("update_time", DateUtil.now()); - WQLObject.getWQLObject("SCH_BASE_Task").update(map, "task_id = '" + taskObj.getString("task_id") + "'"); - RedissonUtils.lock(c->{ - if (status.equals(TaskStatusEnum.FINISHED.getCode())) { - immediateNotifyAcs(null); - } - },"zjInBound",10,this); } diff --git a/lms/nladmin-system/src/main/java/org/nl/modules/common/base/BlockItemDTO.java b/lms/nladmin-system/src/main/java/org/nl/modules/common/base/BlockItemDTO.java new file mode 100755 index 000000000..fb1fa1daf --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/modules/common/base/BlockItemDTO.java @@ -0,0 +1,23 @@ +package org.nl.modules.common.base; + +import lombok.Data; +import org.apache.commons.lang.builder.ToStringBuilder; + +import java.io.Serializable; +import java.util.Map; + +@Data +public class BlockItemDTO implements Serializable { + private static final long serialVersionUID = 4337563581927229706L; + + /** + * 主键(分块明细项Id) + */ + private Long id; + + /** + * Excel一行数据(key为列名[columns_name可以和Excel列显示名不一致],value为单元格内容) + */ + private Map columnMap; + +} diff --git a/lms/nladmin-system/src/main/java/org/nl/modules/common/utils/FileUtil.java b/lms/nladmin-system/src/main/java/org/nl/modules/common/utils/FileUtil.java index e221f58f0..dc0afa657 100644 --- a/lms/nladmin-system/src/main/java/org/nl/modules/common/utils/FileUtil.java +++ b/lms/nladmin-system/src/main/java/org/nl/modules/common/utils/FileUtil.java @@ -19,11 +19,18 @@ import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.poi.excel.BigExcelWriter; import cn.hutool.poi.excel.ExcelUtil; +import com.google.common.collect.Lists; +import lombok.extern.slf4j.Slf4j; +import org.apache.poi.ss.usermodel.*; import org.apache.poi.util.IOUtils; import org.apache.poi.xssf.streaming.SXSSFSheet; +import org.apache.poi.xssf.streaming.SXSSFWorkbook; +import org.nl.modules.common.base.BlockItemDTO; import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.common.utils.enums.CellTypeEnum; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.util.CollectionUtils; import org.springframework.web.multipart.MultipartFile; import javax.servlet.ServletOutputStream; @@ -33,6 +40,7 @@ import java.io.*; import java.security.MessageDigest; import java.text.DecimalFormat; import java.text.SimpleDateFormat; +import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; @@ -43,9 +51,10 @@ import java.util.Map; * @author Zheng Jie * @date 2018-12-27 */ +@Slf4j public class FileUtil extends cn.hutool.core.io.FileUtil { - private static final Logger log = LoggerFactory.getLogger(FileUtil.class); + private Integer batchWriteExcelRowAmount = 500; /** * 系统临时目录 @@ -234,6 +243,88 @@ public class FileUtil extends cn.hutool.core.io.FileUtil { } + /** + * 流导出 + * @param list + * @param response + * @throws IOException + */ + public void downloadExcelIO(List> list, String[] columnExcelNameArr, HttpServletResponse response) { + List> lastRestDataList = list; + List>> dataPiece = Lists.partition(list, 5000); + int blockNum = 0; + int blockNumMax = dataPiece.size(); + List allFileLocations = new ArrayList<>(); + ServletOutputStream out = null; + try { + boolean allFinish = false; + while (!allFinish) { + int thisFileRowNumber = 1; + SXSSFWorkbook wb = null; + try { +// if (blockNum columnMap = lastRestDataList.get(i); + for (int cellNum = 0; cellNum < columnExcelNameArr.length; cellNum++) { + Cell cell = dataRow.createCell(cellNum); + String valueStr = columnMap.get(columnExcelNameArr[cellNum]); + cell.setCellValue(valueStr); + } + thisFileRowNumber++; + } + } + + String localFilePath = SYS_TEM_DIR + IdUtil.fastSimpleUUID()+ blockNum + ".xlsx"; + allFileLocations.add(localFilePath); + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8"); + response.setHeader("Content-Disposition", "attachment;filename="+localFilePath); + out = response.getOutputStream(); + wb.write(out); + // 必须清理流式写入Excel生成的临时文件 + wb.dispose(); + allFinish = true; + }catch (Exception ex){ + log.warn(ex.getMessage()); + throw new BadRequestException(ex.getMessage()); + } finally { + if (out != null) { + try { + out.flush(); + out.close(); + } catch (IOException e) {log.warn(e.getMessage());} + } + if (wb != null) { + try { + wb.dispose(); + } catch (Exception e) {log.warn(e.getMessage());} + } + } + } + }finally { + if (out != null) { + try { + out.flush(); + out.close(); + } catch (IOException e) {log.warn(e.getMessage());} + } + } + } + public static String getFileType(String type) { String documents = "txt doc pdf ppt pps xlsx xls docx"; String music = "mp3 wav wma mpa ram ra aac aif m4a"; @@ -351,4 +442,19 @@ public class FileUtil extends cn.hutool.core.io.FileUtil { return getMd5(getByte(file)); } + private CellStyle createCellStyle(SXSSFWorkbook wb){ + try{ + CellStyle cellStyle = wb.createCellStyle(); + DataFormat dataFormat = wb.createDataFormat(); + String[] formats = CellTypeEnum.get_formats(); + short format = dataFormat.getFormat(formats[3]); + cellStyle.setDataFormat(format); + return cellStyle; + }catch (Exception ee){ + return null; + } + } + } + + diff --git a/lms/nladmin-system/src/main/java/org/nl/modules/common/utils/enums/CellTypeEnum.java b/lms/nladmin-system/src/main/java/org/nl/modules/common/utils/enums/CellTypeEnum.java new file mode 100755 index 000000000..7995c3b90 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/modules/common/utils/enums/CellTypeEnum.java @@ -0,0 +1,45 @@ +package org.nl.modules.common.utils.enums; + +/** + * 单元格格式类型新增 + */ +public enum CellTypeEnum { + /** + * 数字类型 + */ + NUMERIC("numeric"), + /** + * 字符串类型 + */ + STRING("string"), + /** + * 自定义类型:数字三位分割 + */ + NUMERIC_DIV("division"); + + private final static String[] _formats = { + "General",//0 + "0",//1 + "0.00",//2 + "#,##0",//3 + "#,##0.00"//4 + }; + + private String code; + + CellTypeEnum(String code){ + this.code = code; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public static String[] get_formats() { + return _formats; + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/stat/service/impl/OutBillQueryServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/stat/service/impl/OutBillQueryServiceImpl.java index 58a9d7f54..32172a27e 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/stat/service/impl/OutBillQueryServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/stat/service/impl/OutBillQueryServiceImpl.java @@ -8,8 +8,10 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.google.common.collect.Lists; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.nl.b_lms.pdm.subpackagerelation.service.IpdmBiSubpackagerelationService; import org.nl.common.utils.SecurityUtils; import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.common.utils.FileUtil; @@ -18,6 +20,7 @@ import org.nl.modules.wql.core.bean.WQLObject; import org.nl.modules.wql.util.WqlUtil; import org.nl.wms.sch.service.dto.PointDto; import org.nl.wms.stat.service.OutBillQueryService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -25,6 +28,10 @@ import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.*; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentLinkedDeque; +import java.util.function.Function; import java.util.stream.Collectors; /** @@ -37,7 +44,8 @@ import java.util.stream.Collectors; @Slf4j public class OutBillQueryServiceImpl implements OutBillQueryService { - + @Autowired + private IpdmBiSubpackagerelationService ipdmBiSubpackagerelationService; @Override public Map queryAll(Map whereJson, Pageable page, String[] bill_types) { String stor_id = MapUtil.getStr(whereJson, "stor_id"); @@ -271,14 +279,12 @@ public class OutBillQueryServiceImpl implements OutBillQueryService { @Override public void download2(Map map, HttpServletResponse response, String[] bill_types) throws IOException { String stor_id = MapUtil.getStr(map, "stor_id"); - String bill_type = MapUtil.getStr(map, "bill_type"); String with = MapUtil.getStr(map, "with"); // 厚度*幅宽 String begin_time = MapUtil.getStr(map, "begin_time"); String end_time = MapUtil.getStr(map, "end_time"); String pcsn = MapUtil.getStr(map, "pcsn"); String customer_name = MapUtil.getStr(map, "customer_name"); - map.put("flag", "22"); map.put("stor_id", stor_id); if (ObjectUtil.isNotEmpty(bill_types)) { @@ -293,11 +299,9 @@ public class OutBillQueryServiceImpl implements OutBillQueryService { if (StrUtil.isNotEmpty(pcsn)){ // 判断是否有空格 boolean matches = pcsn.matches(".*\\s.*"); - if (matches) { String[] s = pcsn.split(" "); String pcsn_in = String.join("','", Arrays.asList(s)); - map.put("pcsn_in", "('"+pcsn_in+"')"); map.put("pcsn", ""); } else { @@ -307,44 +311,43 @@ public class OutBillQueryServiceImpl implements OutBillQueryService { if (ObjectUtil.isNotEmpty(customer_name)) { map.put("customer_name", "%" + customer_name + "%"); } - // 处理时间 if (ObjectUtil.isNotEmpty(begin_time) && ObjectUtil.isNotEmpty(end_time)) { String begin_time_today = begin_time.substring(0, 10); String end_time_today = end_time.substring(0, 10); - - // 开始时间 String today_begin_time = begin_time_today + " 08:00:00"; - // 结束时间:19:59:59 DateTime parse = DateUtil.parse(end_time_today); String substring = DateUtil.offsetDay(parse, 1).toString().substring(0, 10); - String today_end_time = substring + " 07:59:59"; - map.put("begin_time", today_begin_time); map.put("end_time", today_end_time); } - JSONArray resultJSONArray = WQL.getWO("ST_IVT_OUTBILLQUERY").addParamMap(map).process().getResultJSONArray(0); List content = resultJSONArray.toJavaList(JSONObject.class); - String pcsn_in = content.stream() + List pcsns = content.stream() .map(row -> row.getString("pcsn")) - .collect(Collectors.joining("','")); + .collect(Collectors.toList()); - List subList = WQLObject.getWQLObject("pdm_bi_subpackagerelationrecord") - .query("container_name IN ('" + pcsn_in + "') AND io_type = '0' ORDER BY insert_time") - .getResultJSONArray(0).toJavaList(JSONObject.class); - - List> list = new ArrayList<>(); + ConcurrentLinkedDeque> deque = new ConcurrentLinkedDeque<>(); + Lists.partition(pcsns,500).stream() + .map((Function, CompletableFuture>) o->CompletableFuture.runAsync(() -> { + List subList = ipdmBiSubpackagerelationService.recordQuery(o); + deque.add(subList); + })).parallel().forEach(CompletableFuture::join); + System.out.println("导出数据:"+deque.size()); + List datas = new ArrayList<>(); + for (List jsonObjects : deque) { + datas.addAll(jsonObjects); + } + List> list = new ArrayList<>(); for (int i = 0; i < resultJSONArray.size(); i++) { JSONObject json = resultJSONArray.getJSONObject(i); - Map mp = new LinkedHashMap<>(); - + Map mp = new LinkedHashMap<>(); // 查询第一次入库的源销售订单 - JSONObject jsonSub = subList.stream() + JSONObject jsonSub = datas.stream() .filter(row -> row.getString("container_name").equals(json.getString("pcsn"))) .min(Comparator.comparing(row -> row.getString("insert_time"))) .orElse(null); @@ -445,7 +448,6 @@ public class OutBillQueryServiceImpl implements OutBillQueryService { } } } - mp.put("业务员", json.getString("sales_owner")); mp.put("出库日期", json.getString("input_time")); mp.put("产品规格", String.format("%.0f", json.getDoubleValue("width"))); @@ -455,7 +457,14 @@ public class OutBillQueryServiceImpl implements OutBillQueryService { mp.put("备注", json.getString("remark")); list.add(mp); } - FileUtil.downloadExcel(list, response); - + Set set = list.get(0).keySet(); + int colIndex = 0; + String[] col = new String[set.size()]; + for (String s : set) { + col[colIndex]=s; + colIndex++; + } + new FileUtil().downloadExcelIO(list,col,response); +// FileUtil.downloadExcel(list, response); } }