From 2d9db3f37050a384889b5f39f7eec209e8e4d8ae Mon Sep 17 00:00:00 2001 From: lym <1994302445@qq.com> Date: Tue, 4 Mar 2025 15:31:55 +0800 Subject: [PATCH] =?UTF-8?q?bug=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dal/dataobject/order/OrderDO.java | 8 ++--- .../dal/dataobject/orderBody/OrderBodyDO.java | 8 ++--- .../dataobject/orderGroup/OrderGroupDO.java | 8 ++--- .../dataobject/orderParts/OrderPartsDO.java | 8 ++--- .../dal/dataobject/plate/PlateDO.java | 8 ++--- .../dataobject/process/OrderProcessDO.java | 8 ++--- .../dataobject/processStep/ProcessStepDO.java | 8 ++--- .../dal/dataobject/rawgoods/RawGoodsDO.java | 8 ++--- .../service/order/OrderServiceImpl.java | 16 ++++++++- .../admin/parts/PartsController.java | 9 +++++ .../admin/plate/PlateController.java | 10 ++++++ .../manage/dal/mysql/parts/PartsMapper.java | 8 +++++ .../manage/dal/mysql/plate/PlateMapper.java | 8 +++++ .../manage/service/parts/PartsService.java | 2 ++ .../service/parts/PartsServiceImpl.java | 6 ++++ .../service/plate/PlateExcelListener.java | 32 ++++++++++++++---- .../manage/service/plate/PlateService.java | 2 ++ .../service/plate/PlateServiceImpl.java | 15 ++++++-- .../main/resources/type/excel_plate_add.xlsx | Bin 11945 -> 12060 bytes 19 files changed, 131 insertions(+), 41 deletions(-) diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/order/OrderDO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/order/OrderDO.java index 77b44d398..97ab8f927 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/order/OrderDO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/order/OrderDO.java @@ -107,10 +107,10 @@ public class OrderDO extends BaseDO { * 备注 */ private String remark; - /** - * 是否删除 - */ - private Boolean deleted; +// /** +// * 是否删除 +// */ +// private Boolean deleted; /** * 自定义板编号配置id diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/orderBody/OrderBodyDO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/orderBody/OrderBodyDO.java index 7a2ad59b4..13a221ded 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/orderBody/OrderBodyDO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/orderBody/OrderBodyDO.java @@ -78,8 +78,8 @@ public class OrderBodyDO extends BaseDO { * 备注 */ private String remark; - /** - * 是否删除 - */ - private Boolean deleted; +// /** +// * 是否删除 +// */ +// private Boolean deleted; } \ No newline at end of file diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/orderGroup/OrderGroupDO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/orderGroup/OrderGroupDO.java index e42519f72..532cb500e 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/orderGroup/OrderGroupDO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/orderGroup/OrderGroupDO.java @@ -79,9 +79,9 @@ public class OrderGroupDO extends BaseDO { * 备注 */ private String remark; - /** - * 是否删除 - */ - private Boolean deleted; +// /** +// * 是否删除 +// */ +// private Boolean deleted; } \ No newline at end of file diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/orderParts/OrderPartsDO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/orderParts/OrderPartsDO.java index 7f0efe4b1..5bb15f995 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/orderParts/OrderPartsDO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/orderParts/OrderPartsDO.java @@ -102,9 +102,9 @@ public class OrderPartsDO extends BaseDO { * 备注 */ private String remark; - /** - * 是否删除 - */ - private Boolean deleted; +// /** +// * 是否删除 +// */ +// private Boolean deleted; } \ No newline at end of file diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/plate/PlateDO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/plate/PlateDO.java index c1086fd72..54f7f6eca 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/plate/PlateDO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/plate/PlateDO.java @@ -185,10 +185,10 @@ public class PlateDO extends BaseDO { * 是否作废 */ private Boolean isCancel; - /** - * 是否删除 - */ - private Boolean deleted; +// /** +// * 是否删除 +// */ +// private Boolean deleted; private String customPlateNo; diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/process/OrderProcessDO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/process/OrderProcessDO.java index 0f80456e4..ec5d2fac3 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/process/OrderProcessDO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/process/OrderProcessDO.java @@ -57,9 +57,9 @@ public class OrderProcessDO extends BaseDO { * 下一工序 ID */ private Long nextStepId; - /** - * 是否删除 - */ - private Boolean deleted; +// /** +// * 是否删除 +// */ +// private Boolean deleted; } \ No newline at end of file diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/processStep/ProcessStepDO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/processStep/ProcessStepDO.java index 2710e6f52..4e41a6bb2 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/processStep/ProcessStepDO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/processStep/ProcessStepDO.java @@ -90,9 +90,9 @@ public class ProcessStepDO extends BaseDO { * 工序处理日期 */ private LocalDateTime processDate; - /** - * 是否删除 - */ - private Boolean deleted; +// /** +// * 是否删除 +// */ +// private Boolean deleted; } \ No newline at end of file diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/rawgoods/RawGoodsDO.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/rawgoods/RawGoodsDO.java index ae9dc3b99..482f84316 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/rawgoods/RawGoodsDO.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/dal/dataobject/rawgoods/RawGoodsDO.java @@ -71,9 +71,9 @@ public class RawGoodsDO extends BaseDO { * 规格 */ private String spec; - /** - * 是否删除 - */ - private Boolean deleted; +// /** +// * 是否删除 +// */ +// private Boolean deleted; } \ No newline at end of file diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderServiceImpl.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderServiceImpl.java index a523a0f30..dec9e63d6 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderServiceImpl.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/order/OrderServiceImpl.java @@ -822,7 +822,21 @@ public class OrderServiceImpl implements OrderService { } else if (plateGoodDOS != null && !plateGoodDOS.isEmpty()) { // 存在板材 goodsDO.setGoodsId(plateGoodDOS.get(0).getGoodsId()); } else { // 不存在板材 - throw exception(ORDER_MATCH_NOT); +// throw exception(ORDER_MATCH_NOT); + long plateNo = idWorker.nextId(); + long obtainingTime = idWorker.obtainingTime(); + + String goodsId = goodsDO.getGoodsId() == null ? (obtainingTime) + Long.toString(plateNo).substring(2) : goodsDO.getGoodsId(); + goodsDO.setGoodsId(goodsId); + + + Long plateGoods = (Long) identifierGenerator.nextId(null); + + plateGoodDO = BeanUtils.toBean(goodsDO, PlateGoodDO.class) + .setId(plateGoods) + .setGoodsId(goodsId); + + plateGoodLists.add(plateGoodDO); } } diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/parts/PartsController.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/parts/PartsController.java index 728ed5acc..596d3f5dc 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/parts/PartsController.java +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/parts/PartsController.java @@ -121,6 +121,7 @@ public class PartsController { @Parameter(name = "updateSupport", description = "是否支持更新", example = "true"), @Parameter(name = "organId", description = "配件所属组织ID") }) + @OperateLog(type = IMPORT) @PreAuthorize("@ss.hasAnyPermissions('system:accessory:import','base:accessory:import')") public void importExcel(@RequestParam("file") MultipartFile file, @RequestParam(value = "updateSupport", required = false, defaultValue = "false") Boolean updateSupport, @@ -152,4 +153,12 @@ public class PartsController { return success(BeanUtils.toBean(pageResult, PartsRespVO.class)); } + @GetMapping("/all") + @Operation(summary = "获取全部配件信息") + @PreAuthorize("@ss.hasAnyPermissions('manage:plate:query','base:plate:query')") + public CommonResult> getPlateAll(@RequestParam("organId") Long organId, + @RequestParam("category") String category) { + List list = partsService.getPartAll(organId,category); + return success(BeanUtils.toBean(list, PartsRespVO.class)); + } } diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/PlateController.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/PlateController.java index e30cd8aac..2b43a4334 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/PlateController.java +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/controller/admin/plate/PlateController.java @@ -145,6 +145,7 @@ public class PlateController { @Parameter(name = "updateSupport", description = "是否支持更新,默认为 false", example = "true"), @Parameter(name = "organId", description = "板材所属组织ID") }) + @OperateLog(type = IMPORT) // @PreAuthorize("@ss.hasPermission('manage:plate:import')") @PreAuthorize("@ss.hasAnyPermissions('manage:plate:import','base:plate:import')") public void importExcel(@RequestParam("file") MultipartFile file, @@ -171,4 +172,13 @@ public class PlateController { // plateExcelUtil.clear(); } + + @GetMapping("/all") + @Operation(summary = "获取全部板材信息") + @PreAuthorize("@ss.hasAnyPermissions('manage:plate:query','base:plate:query')") + public CommonResult> getPlateAll(@RequestParam("organId") Long organId) { + List list = plateService.getPlateAll(organId); + return success(BeanUtils.toBean(list, PlateRespVO.class)); + } + } \ No newline at end of file diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/dal/mysql/parts/PartsMapper.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/dal/mysql/parts/PartsMapper.java index 932de050b..fa7235858 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/dal/mysql/parts/PartsMapper.java +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/dal/mysql/parts/PartsMapper.java @@ -9,6 +9,8 @@ import com.cf.imes.module.manage.dal.dataobject.parts.PartsDO; import org.apache.ibatis.annotations.Mapper; +import java.util.List; + /** * 配件表 parts_{N} Mapper * @@ -172,4 +174,10 @@ public interface PartsMapper extends BaseMapperX { return selectPage(reqVO, queryWrapper); } + default List getAllByOrganId(Long organId, String category) { + return selectList(new LambdaQueryWrapperX() + .eq(PartsDO::getOrganId, organId) + .eq(PartsDO::getCategory, category) + .eq(PartsDO::getDeleted, 0)); + } } \ No newline at end of file diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/dal/mysql/plate/PlateMapper.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/dal/mysql/plate/PlateMapper.java index 05c9faa32..08205cbd8 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/dal/mysql/plate/PlateMapper.java +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/dal/mysql/plate/PlateMapper.java @@ -9,6 +9,8 @@ import com.cf.imes.module.manage.dal.dataobject.plate.PlateDO; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import java.util.List; + /** * 板材信息表 plate_{N} Mapper * @@ -91,4 +93,10 @@ public interface PlateMapper extends BaseMapperX { .eq(PlateDO::getGoodsId, goodId) .eq(PlateDO::getOrganId, organId)) > 0; } + + default List getAllByOrganId(Long organId) { + return selectList(new LambdaQueryWrapper() + .eq(PlateDO::getOrganId, organId) + .eq(PlateDO::getDeleted, 0)); + } } diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/parts/PartsService.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/parts/PartsService.java index 299a19ae8..5d75cf48d 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/parts/PartsService.java +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/parts/PartsService.java @@ -84,4 +84,6 @@ public interface PartsService { return applicationHome.getDir().getAbsolutePath() + File.separator + "type"; } + + List getPartAll(Long organId, String category); } \ No newline at end of file diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/parts/PartsServiceImpl.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/parts/PartsServiceImpl.java index 2fcc3a9c4..f064706f7 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/parts/PartsServiceImpl.java +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/parts/PartsServiceImpl.java @@ -208,6 +208,12 @@ public class PartsServiceImpl implements PartsService { } } + @Override + public List getPartAll(Long organId, String category) { + organId = getOrganId(BASE_PARTS_QUERY_PERMISSION, getLoginUser().getId(), organId); + return partsMapper.getAllByOrganId(organId , category); + } + private void validateOrganExists(Long organId) { CommonResult index = organApi.validOrgan(organId); if (!index.isSuccess()) { diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/plate/PlateExcelListener.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/plate/PlateExcelListener.java index 87a473419..c2b5a2c8b 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/plate/PlateExcelListener.java +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/plate/PlateExcelListener.java @@ -30,7 +30,7 @@ public final class PlateExcelListener extends ExcelListener extends ExcelListener extends ExcelListener extends ExcelListener maxLength) { + this.flag = false; + data.setResult(data.getResult() + "," + head + "信息有误"); + } + } + } + /** * 读取完后操作 * diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/plate/PlateService.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/plate/PlateService.java index 2d8887e64..7976aaa39 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/plate/PlateService.java +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/plate/PlateService.java @@ -88,4 +88,6 @@ public interface PlateService { return applicationHome.getDir().getAbsolutePath() + File.separator + "type"; } + + List getPlateAll(Long organId); } \ No newline at end of file diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/plate/PlateServiceImpl.java b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/plate/PlateServiceImpl.java index 58b700b7c..69196fc16 100644 --- a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/plate/PlateServiceImpl.java +++ b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/java/com/cf/imes/module/manage/service/plate/PlateServiceImpl.java @@ -150,13 +150,18 @@ public class PlateServiceImpl implements PlateService { PlateDO existPlate = plateMapper.selectByGoodID(importPlate.getGoodsId(), finalOrganId); if (existPlate == null) { respVO.getCreatePlateNames().add(importPlate.getGoodsName()); - insertList.add(BeanUtils.toBean(importPlate, PlateDO.class).setOrganId(finalOrganId).setTexture(Boolean.valueOf(importPlate.getTexture()))); + insertList.add(BeanUtils.toBean(importPlate, PlateDO.class) + .setOrganId(finalOrganId)); +// .setTexture(Boolean.valueOf(importPlate.getTexture())); return; } // 判断是否允许更新 if (!isUpdateSupport) { respVO.getFailurePlateNames().put(importPlate.getGoodsName(), ErrorCodeConstants.PLATE_EXISTS.getMsg()); - PlateDO plateDO = BeanUtils.toBean(importPlate, PlateDO.class).setOrganId(finalOrganId).setId(existPlate.getId()).setTexture(Boolean.valueOf(importPlate.getTexture())); + PlateDO plateDO = BeanUtils.toBean(importPlate, PlateDO.class) + .setOrganId(finalOrganId) + .setId(existPlate.getId()); +// .setTexture(Boolean.valueOf(importPlate.getTexture())); updateList.add(plateDO); } }); @@ -177,6 +182,12 @@ public class PlateServiceImpl implements PlateService { FileHelperUtil.getFile(rootPath, response, value); } + @Override + public List getPlateAll(Long organId) { + organId = getOrganId(BASE_PLATE_QUERY_PERMISSION, getLoginUser().getId(), organId); + return plateMapper.getAllByOrganId( organId); + } + private void validateOrganExists(Long organId) { CommonResult index = organApi.validOrgan(organId); if (!index.isSuccess()) { diff --git a/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/resources/type/excel_plate_add.xlsx b/cf-module-prod-manage/cf-module-prod-manage-biz/src/main/resources/type/excel_plate_add.xlsx index ce5f2918e5e55606f4104aa2ff012b8abe7d67ae..f2a8bb33c784c02aa1433f42f1b1bd00ce5f357c 100644 GIT binary patch delta 4818 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 delta 4691 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 J5PbiJ{0p5O)-M16