宁夏万通需求:出库单行支持主/辅单位录入;考勤节假日配置改为时间段;物料型号维护;设备批量删除;来料检验默认方案解析
1. MES 仓储:6 张出入库单明细行(采购入库、杂项出库、外协发料、生产领料、销售出库、采购退货)新增 item_model_id/enter_unit_measure_id/enter_quantity 三列,支持按「主单位 + 辅单位(结合型号换算)」录入,新增 MesWmItemUnitConvertService 统一换算;quantity 仍为主单位口径,库存与库存流水口径不变。
2. MDM:新增物料型号(mdm_item_model)全套接口与管理服务,物料 DTO 补充 unitMeasureId2/unitMeasureRate1/unitMeasureId3/unitMeasureRate2 主辅单位信息,物料列表支持型号相关排序。
3. HRM 考勤:节假日配置由「单日」改为「时间段」,新增 start_date/end_date 两列,保存时校验结束不早于开始、且与已有配置区间不重叠(提示带本次区间、已有配置名称与区间);列表查询改为按区间交集筛选,isWorkDay 按时间段覆盖判断;date 列保留写入开始日期仅作存量兼容。
4. MES 设备:设备台账支持批量删除。
5. MES 质检:IQC 默认检验方案解析(物料已绑定优先,未绑定取任一启用方案)。
6. docs:全库配置导出生成脚本更新为 0930 版基线(417 张表,含上述表结构变更)。
7. 不含本地配置 application-local.yaml。
| | |
| | | # -*- coding: utf-8 -*- |
| | | """éæ°çæ docs/sql/config_export_all_20260928.sqlï¼å
¨ééçæï¼æ¿æ¢ 0918 çï¼ã |
| | | """éæ°çæ docs/sql/config_export_all_20260930.sqlï¼å
¨ééçæï¼æ¿æ¢ 0929 çï¼ã |
| | | |
| | | é¶æ®µä¸ï¼å½åæºåº ruoyi-vue-pro å
¨åº 416 å¼ è¡¨ CREATE TABLE + 6 ç±»é
ç½®æ°æ®ï¼mysqldump åé¢éï¼ã |
| | | é¶æ®µäºï¼æ²¿ç¨ 0918 æä»¶çè·¨åºèº«ä»½/èå/OAuth2 补导段ï¼éåå¤ç¨ï¼ã |
| | | é¶æ®µä¸ï¼å½åæºåº ruoyi-vue-pro å
¨åº CREATE TABLE + 6 ç±»é
ç½®æ°æ®ï¼mysqldump åé¢éï¼ã |
| | | é¶æ®µäºï¼æ²¿ç¨ 0929 æä»¶çè·¨åºèº«ä»½/èå/OAuth2 补导段ï¼éåå¤ç¨ï¼ã |
| | | """ |
| | | import re |
| | | import subprocess |
| | |
| | | USER = "root" |
| | | PWD = "1234" |
| | | |
| | | BASE_DIR = r"D:\develop\XingRuan\MOM\mom-pro2-after\docs\sql" |
| | | SRC_0918 = BASE_DIR + r"\config_export_all_20260918.sql" |
| | | OUT = BASE_DIR + r"\config_export_all_20260928.sql" |
| | | BASE_DIR = r"D:\develop\XingRuan\MOM-LXWT\mom-pro2-after\docs\sql" |
| | | SRC_PREV = BASE_DIR + r"\config_export_all_20260929.sql" |
| | | OUT = BASE_DIR + r"\config_export_all_20260930.sql" |
| | | |
| | | MYSQL = MYSQL_BIN + r"\mysql.exe" |
| | | MYSQLDUMP = MYSQL_BIN + r"\mysqldump.exe" |
| | |
| | | |
| | | |
| | | def load_stage2_block(): |
| | | with open(SRC_0918, encoding="utf-8") as f: |
| | | with open(SRC_PREV, encoding="utf-8") as f: |
| | | lines = f.read().splitlines() |
| | | for i, line in enumerate(lines): |
| | | if "é¶æ®µäºï¼è¡¥å¯¼èº«ä»½" in line: |
| | | start = i - 1 # 䏿¹ =============== 横线 |
| | | return "\n".join(lines[start:]).rstrip() + "\n" |
| | | raise RuntimeError("0918 æä»¶æªæ¾å°é¶æ®µäºæ®µè½") |
| | | raise RuntimeError("0929 æä»¶æªæ¾å°é¶æ®µäºæ®µè½") |
| | | |
| | | |
| | | HEADER = """-- ======================================================================= |
| | | -- æä»¶ï¼config_export_all_20260928.sql |
| | | -- æä»¶ï¼config_export_all_20260930.sql |
| | | -- ç¨éï¼ruoyi-vue-proãå
¨åºè¡¨ç»æ + 6 ç±»é
ç½®æ°æ®ã导åºï¼ä¾åç»æå
¨æ°åºåå§å |
| | | -- é¶æ®µä¸ï¼å
¨åº {n_tables} å¼ è¡¨ CREATE TABLE + 6 ç±»é
ç½®æ°æ®ï¼åé¢éï¼èªå
å«ï¼ä¸ä¾èµæºåºå¨çº¿ï¼ |
| | | -- é¶æ®µäºï¼è·¨åºè¡¥å¯¼ èå/è§è²/ç¨æ·/OAuth2 çèº«ä»½æ°æ®ï¼æ§è¡æä»æºåºæ·è´ï¼ |
| | | -- æ¥æºåºï¼ruoyi-vue-pro |
| | | -- åºçº¿ï¼2026-09-18 çï¼419 å¼ è¡¨ï¼â æ¬æ¬¡ä¸º**å
¨ééçæ**ï¼ä¸ååºäºæ§æä»¶æè¡¥ä¸ï¼ï¼ |
| | | -- ç´æ¥æå½åæºåºææ°ç¶æé导ï¼ä¸æ¬¡æ§è¦ç 0918 ä¹åå
¨é¨ç»æä¸é
ç½®æ¼ç§»ã |
| | | -- æ¬æ¬¡åæ´ï¼ç¸å¯¹ 0918ï¼2026-09-28ï¼ï¼ |
| | | -- â è¡¨ç»æï¼419 â {n_tables} å¼ |
| | | -- - å é¤ 6 å¼ åå²å¤ä»½è¡¨ï¼bpm_bak_20260904_bytearray/category/deployment/model/procdef/procinfoï¼æºåºå·²æ ï¼ |
| | | -- + æ°å¢ 3 å¼ è¡¨ï¼after_sale_problemãafter_sale_visitãbpm_process_auto_approve_configï¼ä»
ç»æï¼æºåºæ æ°æ®ï¼ |
| | | -- + 10 å¼ è¡¨ DDL ä¸ 0918 ä¸åï¼ä»¥å½åæºåºä¸ºåï¼after_sale_ticketãmes_qc_indicatorãmes_qc_indicator_result_detailã |
| | | -- mes_qc_ipqcãmes_qc_iqcãmes_qc_oqcãmes_qc_rqcãmes_qc_templateãmes_qc_template_indicatorãmes_wm_return_issue_lineï¼ |
| | | -- â¡ é
ç½®æ°æ®ä»¥å½åæºåºä¸ºåé导ï¼ä¸å为 0918 声æå¼ â æ¬æ¬¡å¯¼åºå¼ï¼ï¼ |
| | | -- - system_dict_type 241â{n_dicttype}ãsystem_dict_data 1157â{n_dictdata}ï¼å« hrm_holiday_type èåæ¥ç±»åçæ°å¢åå
¸ï¼ |
| | | -- - system_company_config 0â1ãbi_chart_config 36â37ãbi_warehouse_coordinate 1â2ãai_api_key 1â3ãbpm_user_group 3â4 |
| | | -- - bpm_business_attach 11â4ãbpm_category 22â15ãbpm_form 4â3ãbpm_process_listener 1â0ï¼æºåºå·²å é¤çè¡ä¸å导åºï¼ |
| | | -- åºçº¿ï¼2026-09-29 çï¼417 å¼ è¡¨ï¼â æ¬æ¬¡ä¸º**å
¨ééçæ**ï¼ä¸ååºäºæ§æä»¶æè¡¥ä¸ï¼ï¼ |
| | | -- ç´æ¥æå½åæºåºææ°ç¶æé导ï¼ä¸æ¬¡æ§è¦ç 0929 ä¹åå
¨é¨ç»æä¸é
ç½®æ¼ç§»ã |
| | | -- æ¬æ¬¡åæ´ï¼ç¸å¯¹ 0929ï¼2026-09-30ï¼ï¼ |
| | | -- â 表æ°éä¸åï¼{n_tables} å¼ ï¼ï¼æ æ°å¢/å é¤è¡¨ã |
| | | -- â¡ 5 å¼ åºåºåæç»è¡å¢å 3 åï¼åºåºåè¡æ¯æã主åä½ + è¾
åä½ï¼ç»ååå·æ¢ç®ï¼ãå½å
¥ï¼ï¼ |
| | | -- mes_wm_misc_issue_lineï¼æé¡¹åºåºï¼ãmes_wm_outsource_issue_lineï¼å¤ååæï¼ã |
| | | -- mes_wm_product_issue_lineï¼çäº§é¢æï¼ãmes_wm_product_sales_lineï¼éå®åºåºï¼ã |
| | | -- mes_wm_return_vendor_lineï¼éè´éè´§ï¼ï¼ |
| | | -- item_model_idï¼ç©æåå·ç¼å·ï¼ãenter_unit_measure_idï¼å½å
¥åä½ç¼å·ï¼ã |
| | | -- enter_quantityï¼å½å
¥æ°éï¼æå½å
¥åä½è®¡ï¼ï¼ |
| | | -- quantity ä¿æä¸ºãç©æä¸»åä½å£å¾çåºåºæ°éãï¼åºåä¸åºåæµæ°´å£å¾ä¸åã |
| | | -- ⢠hrm_attendance_holiday å¢å 2 åï¼èå¤è忥é
ç½®ç±ãåæ¥ãæ¹ä¸ºãæ¶é´æ®µãå½å
¥ï¼ï¼ |
| | | -- start_dateï¼å¼å§æ¥æï¼ãend_dateï¼ç»ææ¥æï¼ï¼å date åä¿çä¸å¨ï¼ |
| | | -- å端ä¿åæ¶ä»åå
¥å¼å§æ¥æï¼ä»
ä½åéå
¼å®¹ï¼ä¸å¡å¤ææ¹ç¨ start_date/end_dateã |
| | | -- ⣠é
ç½®æ°æ®ä»¥å½åæºåºä¸ºåéå¯¼ï¼ |
| | | -- - system_dict_type {n_dicttype}ãsystem_dict_data {n_dictdata} |
| | | -- - ååæµç¨å®ä¹ææºåºå½å**æ¿æ´»**éåé导ï¼{n_procdef} 个æµç¨å®ä¹ + 对åºé¨ç½²/åèèµæº + è®¾è®¡ææ¨¡åï¼ |
| | | -- ⢠èå/æéèç¹ï¼è忥é
ç½® 6014/60141-60145ã忍¡å导å
¥æé® 1075311/1075417-1075420 çï¼ç±é¶æ®µäº |
| | | -- è·¨åºå
¨éæ·è´èªå¨æºå¸¦ï¼æ 鿹卿¬æä»¶æ°æ®æ®µï¼å¨æ¤ç»è®°ä»¥è¯´ææ¬çæä»¶ç¡®å®è¦çè¿äºåæ´ã |
| | | -- ⤠èå/æéèç¹ç±é¶æ®µäºè·¨åºå
¨éæ·è´èªå¨æºå¸¦ï¼æ 鿹卿¬æä»¶æ°æ®æ®µã |
| | | -- æ¬æ¬¡æªæ°å¢èå/æéç¹ï¼è忥é
ç½®èååå
¶æé®æéæ¤åå·²å
¥åºï¼éé¶æ®µäºèªå¨æºå¸¦ï¼ã |
| | | -- éªè¯ï¼{verify} |
| | | -- èå´ï¼å
¨åº BASE TABLE å
± {n_tables} å¼ ï¼å
¨é¨è¾åº CREATE TABLEï¼ |
| | | -- ä»
以ä¸é
ç½®ç±»è¡¨å¸¦æ°æ®(INSERT)ï¼å
¶ä½ä¸å¡/ç³»ç»/è¿è¡åå²è¡¨åªä¿çç©ºè¡¨ç»æï¼ |
| | |
| | | ErrorCode ATTENDANCE_RULE_NAME_EXISTS = new ErrorCode(1_030_004_006, "èå¤è§ååç§°å·²åå¨"); |
| | | ErrorCode ATTENDANCE_RULE_DEPT_EXISTS = new ErrorCode(1_030_004_007, "该é¨é¨å·²é
ç½®èå¤è§å"); |
| | | ErrorCode ATTENDANCE_HOLIDAY_NOT_EXISTS = new ErrorCode(1_030_004_008, "è忥é
ç½®ä¸åå¨ï¼ID={}ï¼ï¼å¯è½å·²è¢«ä»äººå é¤ãè¯·å·æ°å表åéè¯"); |
| | | ErrorCode ATTENDANCE_HOLIDAY_DATE_EXISTS = new ErrorCode(1_030_004_009, "æ¥æã{}ãå·²åå¨è忥é
ç½®ï¼ä¸è½é夿°å¢ã请æ¹ä¸ºç¼è¾è¯¥æ¥æçè®°å½ï¼å¯ç´æ¥ä¿®æ¹ç±»åä¸å¤æ³¨ï¼ï¼æå
å é¤åè®°å½åæ°å¢"); |
| | | ErrorCode ATTENDANCE_HOLIDAY_RANGE_OVERLAP = new ErrorCode(1_030_004_009, "æ¥æåºé´ã{} ~ {}ãä¸å·²æé
ç½®ã{}ãï¼{} ~ {}ï¼éå ï¼æ æ³ä¿åãè¯·è°æ´æ¬æ¬¡æ¥æåºé´é¿å¼è¯¥é
ç½®ï¼æç´æ¥ç¼è¾/å é¤å·²æé
ç½®ååä¿å"); |
| | | ErrorCode ATTENDANCE_CLOCK_FAIL_NO_RULE = new ErrorCode(1_030_004_010, "æå¡å¤±è´¥ï¼æªæ¾å°èå¤è§å"); |
| | | ErrorCode ATTENDANCE_CLOCK_FAIL_HOLIDAY = new ErrorCode(1_030_004_011, "æå¡å¤±è´¥ï¼å½æ¥ä¸ºä¼æ¯æ¥"); |
| | | ErrorCode ATTENDANCE_CLOCK_FAIL_NOT_WORKDAY = new ErrorCode(1_030_004_012, "æå¡å¤±è´¥ï¼å½æ¥ä¸æ¯å·¥ä½æ¥"); |
| | |
| | | ErrorCode ATTENDANCE_EXCEPTION_UPDATE_AUDIT_STATUS_FAIL = new ErrorCode(1_030_004_014, "æ´æ°èå¤å¼å¸¸å®¡æ¹ç¶æå¤±è´¥ï¼åå ï¼ä¸æ¯å®¡æ¹ä¸ç¶æ"); |
| | | ErrorCode ATTENDANCE_EXCEPTION_BPM_PROCESS_DEFINITION_NOT_EXISTS = new ErrorCode(1_030_004_015, "èå¤å¼å¸¸å®¡æ¹æµç¨ä¸åå¨"); |
| | | ErrorCode ATTENDANCE_CLOCK_ALREADY_CLOCKED = new ErrorCode(1_030_004_016, "å·²æè¿å¡ï¼è¯·å¿é夿å¡"); |
| | | ErrorCode ATTENDANCE_HOLIDAY_DATE_RANGE_INVALID = new ErrorCode(1_030_004_017, "ç»ææ¥æã{}ãä¸è½æ©äºå¼å§æ¥æã{}ãï¼æ æ³ä¿åãè¯·éæ°éæ©æ£ç¡®çæ¥æåºé´"); |
| | | |
| | | // ========== èªé
¬ç®¡ç 1-030-005-000 ========== |
| | | ErrorCode SALARY_STRUCTURE_NOT_EXISTS = new ErrorCode(1_030_005_000, "èªé
¬ç»æä¸åå¨"); |
| | |
| | | @Schema(description = "æ¯å¦æ³å®è忥ï¼0-å¦ï¼1-æ¯", example = "1") |
| | | private Integer isLegal; |
| | | |
| | | @Schema(description = "æ¥æåºé´ï¼ä¼ [å¼å§æ¥æ, ç»ææ¥æ]", example = "[\"2026-01-01\", \"2026-12-31\"]") |
| | | @Schema(description = "æ¥æåºé´ï¼ä¼ [å¼å§æ¥æ, ç»ææ¥æ]ï¼è¿åä¸é
ç½®æ¶é´æ®µæäº¤éçæ°æ®", example = "[\"2026-01-01\", \"2026-12-31\"]") |
| | | private LocalDate[] date; |
| | | |
| | | } |
| | |
| | | @ExcelProperty("è忥åç§°") |
| | | private String name; |
| | | |
| | | @Schema(description = "æ¥æ") |
| | | @ExcelProperty("æ¥æ") |
| | | private LocalDate date; |
| | | @Schema(description = "å¼å§æ¥æ") |
| | | @ExcelProperty("å¼å§æ¥æ") |
| | | private LocalDate startDate; |
| | | |
| | | @Schema(description = "ç»ææ¥æ") |
| | | @ExcelProperty("ç»ææ¥æ") |
| | | private LocalDate endDate; |
| | | |
| | | @Schema(description = "ç±»åï¼1-伿¯æ¥ï¼2-工使¥") |
| | | @ExcelProperty(value = "ç±»å", converter = DictConvert.class) |
| | |
| | | @NotBlank(message = "è忥åç§°ä¸è½ä¸ºç©º") |
| | | private String name; |
| | | |
| | | @Schema(description = "æ¥æ", requiredMode = Schema.RequiredMode.REQUIRED, example = "2024-02-10") |
| | | @NotNull(message = "æ¥æä¸è½ä¸ºç©º") |
| | | private LocalDate date; |
| | | @Schema(description = "å¼å§æ¥æ", requiredMode = Schema.RequiredMode.REQUIRED, example = "2024-02-10") |
| | | @NotNull(message = "å¼å§æ¥æä¸è½ä¸ºç©º") |
| | | private LocalDate startDate; |
| | | |
| | | @Schema(description = "ç»ææ¥æ", requiredMode = Schema.RequiredMode.REQUIRED, example = "2024-02-17") |
| | | @NotNull(message = "ç»ææ¥æä¸è½ä¸ºç©º") |
| | | private LocalDate endDate; |
| | | |
| | | @Schema(description = "ç±»åï¼1-伿¯æ¥ï¼2-工使¥", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") |
| | | @NotNull(message = "ç±»åä¸è½ä¸ºç©º") |
| | |
| | | private String name; |
| | | |
| | | /** |
| | | * æ¥æ |
| | | * æ¥æï¼å
¼å®¹åé NOT NULL åçåä½å段ï¼å§ç»åå
¥ startDateï¼ |
| | | */ |
| | | private LocalDate date; |
| | | |
| | | /** |
| | | * å¼å§æ¥æ |
| | | */ |
| | | private LocalDate startDate; |
| | | |
| | | /** |
| | | * ç»ææ¥æ |
| | | */ |
| | | private LocalDate endDate; |
| | | |
| | | /** |
| | | * ç±»åï¼1-伿¯æ¥ï¼2-工使¥ |
| | | * |
| | | * æä¸¾ {@link cn.iocoder.yudao.module.hrm.enums.HrmAttendanceHolidayTypeEnum} |
| | |
| | | public interface HrmAttendanceHolidayMapper extends BaseMapperX<HrmAttendanceHolidayDO> { |
| | | |
| | | default PageResult<HrmAttendanceHolidayDO> selectPage(HrmAttendanceHolidayPageReqVO reqVO) { |
| | | return selectPage(reqVO, new LambdaQueryWrapperX<HrmAttendanceHolidayDO>() |
| | | LambdaQueryWrapperX<HrmAttendanceHolidayDO> query = new LambdaQueryWrapperX<HrmAttendanceHolidayDO>() |
| | | .likeIfPresent(HrmAttendanceHolidayDO::getName, reqVO.getName()) |
| | | .eqIfPresent(HrmAttendanceHolidayDO::getType, reqVO.getType()) |
| | | .eqIfPresent(HrmAttendanceHolidayDO::getIsLegal, reqVO.getIsLegal()) |
| | | .betweenIfPresent(HrmAttendanceHolidayDO::getDate, reqVO.getDate()) |
| | | .orderByDesc(HrmAttendanceHolidayDO::getDate)); |
| | | .eqIfPresent(HrmAttendanceHolidayDO::getIsLegal, reqVO.getIsLegal()); |
| | | // æ¥æçéï¼é
ç½®æ¶é´æ®µä¸æ¥è¯¢åºé´æäº¤éå³å½ä¸ |
| | | LocalDate[] dateRange = reqVO.getDate(); |
| | | if (dateRange != null && dateRange.length >= 2 && dateRange[0] != null && dateRange[1] != null) { |
| | | query.le(HrmAttendanceHolidayDO::getStartDate, dateRange[1]) |
| | | .ge(HrmAttendanceHolidayDO::getEndDate, dateRange[0]); |
| | | } |
| | | return selectPage(reqVO, query.orderByDesc(HrmAttendanceHolidayDO::getStartDate) |
| | | .orderByDesc(HrmAttendanceHolidayDO::getId)); |
| | | } |
| | | |
| | | default HrmAttendanceHolidayDO selectByDate(LocalDate date) { |
| | | return selectOne(HrmAttendanceHolidayDO::getDate, date); |
| | | } |
| | | |
| | | default List<HrmAttendanceHolidayDO> selectListByDateBetween(LocalDate startDate, LocalDate endDate) { |
| | | /** |
| | | * æ¥è¯¢æ¶é´æ®µä¸ [startDate, endDate] æäº¤éçé
ç½® |
| | | * ä¼ å
¥åä¸å¤©ï¼date, dateï¼æ¶ï¼å³æ¥è¯¢è¦ç该æ¥çé
ç½® |
| | | */ |
| | | default List<HrmAttendanceHolidayDO> selectListByDateRange(LocalDate startDate, LocalDate endDate) { |
| | | return selectList(new LambdaQueryWrapperX<HrmAttendanceHolidayDO>() |
| | | .ge(HrmAttendanceHolidayDO::getDate, startDate) |
| | | .le(HrmAttendanceHolidayDO::getDate, endDate) |
| | | .orderByAsc(HrmAttendanceHolidayDO::getDate)); |
| | | .le(HrmAttendanceHolidayDO::getStartDate, endDate) |
| | | .ge(HrmAttendanceHolidayDO::getEndDate, startDate) |
| | | .orderByAsc(HrmAttendanceHolidayDO::getStartDate) |
| | | .orderByAsc(HrmAttendanceHolidayDO::getId)); |
| | | } |
| | | |
| | | } |
| | |
| | | PageResult<HrmAttendanceHolidayDO> getAttendanceHolidayPage(HrmAttendanceHolidayPageReqVO pageReqVO); |
| | | |
| | | /** |
| | | * è·å¾æå®æ¥æèå´çè忥å表 |
| | | * è·å¾æ¶é´æ®µä¸æå®æ¥æèå´æäº¤éçè忥å表 |
| | | * |
| | | * @param startDate å¼å§æ¥æ |
| | | * @param endDate ç»ææ¥æ |
| | |
| | | |
| | | @Override |
| | | public Long createAttendanceHoliday(HrmAttendanceHolidaySaveReqVO createReqVO) { |
| | | // æ ¡éªæ¥ææ¯å¦å·²åå¨é
ç½® |
| | | validateAttendanceHolidayDateExists(createReqVO.getDate()); |
| | | validateDateRange(createReqVO); |
| | | validateDateRangeNoOverlap(createReqVO.getStartDate(), createReqVO.getEndDate(), null); |
| | | HrmAttendanceHolidayDO attendanceHoliday = BeanUtils.toBean(createReqVO, HrmAttendanceHolidayDO.class); |
| | | attendanceHoliday.setDate(createReqVO.getStartDate()); |
| | | if (attendanceHoliday.getIsLegal() == null) { |
| | | attendanceHoliday.setIsLegal(0); |
| | | } |
| | |
| | | @Override |
| | | public void updateAttendanceHoliday(HrmAttendanceHolidaySaveReqVO updateReqVO) { |
| | | validateAttendanceHolidayExists(updateReqVO.getId()); |
| | | // å¦ææ¥æåæ´ï¼æ ¡éªæ°æ¥ææ¯å¦å·²åå¨é
ç½® |
| | | HrmAttendanceHolidayDO oldHoliday = attendanceHolidayMapper.selectById(updateReqVO.getId()); |
| | | if (!oldHoliday.getDate().equals(updateReqVO.getDate())) { |
| | | validateAttendanceHolidayDateExists(updateReqVO.getDate()); |
| | | } |
| | | validateDateRange(updateReqVO); |
| | | validateDateRangeNoOverlap(updateReqVO.getStartDate(), updateReqVO.getEndDate(), updateReqVO.getId()); |
| | | HrmAttendanceHolidayDO updateObj = BeanUtils.toBean(updateReqVO, HrmAttendanceHolidayDO.class); |
| | | updateObj.setDate(updateReqVO.getStartDate()); |
| | | attendanceHolidayMapper.updateById(updateObj); |
| | | } |
| | | |
| | |
| | | } |
| | | } |
| | | |
| | | private void validateAttendanceHolidayDateExists(LocalDate date) { |
| | | if (attendanceHolidayMapper.selectByDate(date) != null) { |
| | | throw exception(ATTENDANCE_HOLIDAY_DATE_EXISTS, date); |
| | | private void validateDateRange(HrmAttendanceHolidaySaveReqVO reqVO) { |
| | | if (reqVO.getEndDate().isBefore(reqVO.getStartDate())) { |
| | | throw exception(ATTENDANCE_HOLIDAY_DATE_RANGE_INVALID, reqVO.getEndDate(), reqVO.getStartDate()); |
| | | } |
| | | } |
| | | |
| | | private void validateDateRangeNoOverlap(LocalDate startDate, LocalDate endDate, Long excludeId) { |
| | | for (HrmAttendanceHolidayDO exist : attendanceHolidayMapper.selectListByDateRange(startDate, endDate)) { |
| | | if (excludeId != null && excludeId.equals(exist.getId())) { |
| | | continue; |
| | | } |
| | | throw exception(ATTENDANCE_HOLIDAY_RANGE_OVERLAP, startDate, endDate, |
| | | exist.getName(), exist.getStartDate(), exist.getEndDate()); |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | @Override |
| | | public List<HrmAttendanceHolidayDO> getAttendanceHolidayListByDateRange(LocalDate startDate, LocalDate endDate) { |
| | | return attendanceHolidayMapper.selectListByDateBetween(startDate, endDate); |
| | | return attendanceHolidayMapper.selectListByDateRange(startDate, endDate); |
| | | } |
| | | |
| | | @Override |
| | | public boolean isWorkDay(LocalDate date) { |
| | | // 1. æ¥è¯¢è忥é
ç½® |
| | | HrmAttendanceHolidayDO holiday = attendanceHolidayMapper.selectByDate(date); |
| | | if (holiday != null) { |
| | | // 1. æ¥è¯¢è¦çè¯¥æ¥æçè忥é
ç½®ï¼é
ç½®æ¶é´æ®µä¸å
许éå ï¼è³å¤å½ä¸ä¸æ¡ï¼ |
| | | List<HrmAttendanceHolidayDO> holidays = attendanceHolidayMapper.selectListByDateRange(date, date); |
| | | if (!holidays.isEmpty()) { |
| | | // æé
ç½®æ¶ï¼æé
ç½®å¤æ |
| | | return HrmAttendanceHolidayTypeEnum.WORK_DAY.getType().equals(holiday.getType()); |
| | | return HrmAttendanceHolidayTypeEnum.WORK_DAY.getType().equals(holidays.get(0).getType()); |
| | | } |
| | | // 2. æ é
ç½®æ¶ï¼æå¨æ«å¤æ |
| | | DayOfWeek dayOfWeek = date.getDayOfWeek(); |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mdm.api.item; |
| | | |
| | | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| | | import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemModelRespDTO; |
| | | |
| | | import java.util.Collection; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; |
| | | |
| | | /** |
| | | * MDM ç©æåå· API æ¥å£ |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | public interface MdmItemModelApi { |
| | | |
| | | String PREFIX = "/rpc-api/mdm/item-model"; |
| | | |
| | | /** |
| | | * è·åç©æåå· |
| | | * |
| | | * @param id åå·ç¼å· |
| | | * @return ç©æåå· |
| | | */ |
| | | CommonResult<MdmItemModelRespDTO> getItemModel(Long id); |
| | | |
| | | /** |
| | | * è·åç©æåå·å表 |
| | | * |
| | | * @param ids åå·ç¼å·å表 |
| | | * @return ç©æåå·å表 |
| | | */ |
| | | CommonResult<List<MdmItemModelRespDTO>> getItemModelList(Collection<Long> ids); |
| | | |
| | | /** |
| | | * è·åç©æåå· Map |
| | | * |
| | | * @param ids åå·ç¼å·å表 |
| | | * @return ç©æåå· Map |
| | | */ |
| | | default Map<Long, MdmItemModelRespDTO> getItemModelMap(Collection<Long> ids) { |
| | | List<MdmItemModelRespDTO> list = getItemModelList(ids).getCheckedData(); |
| | | return convertMap(list, MdmItemModelRespDTO::getId); |
| | | } |
| | | |
| | | /** |
| | | * è·åæå®ç©æçåå·å表 |
| | | * |
| | | * @param itemId ç©æç¼å· |
| | | * @return ç©æåå·å表 |
| | | */ |
| | | CommonResult<List<MdmItemModelRespDTO>> getItemModelListByItemId(Long itemId); |
| | | |
| | | /** |
| | | * æ ¡éªç©æåå·åå¨ |
| | | * |
| | | * @param id åå·ç¼å· |
| | | * @return ç©æåå· |
| | | */ |
| | | CommonResult<MdmItemModelRespDTO> validateItemModelExists(Long id); |
| | | |
| | | /** |
| | | * æ ¡éªç©æåå·åå¨ãå¯ç¨ï¼ä¸å½å±äºæå®ç©æ |
| | | * |
| | | * @param id åå·ç¼å· |
| | | * @param itemId ç©æç¼å· |
| | | * @return ç©æåå· |
| | | */ |
| | | CommonResult<MdmItemModelRespDTO> validateItemModelExistsAndEnable(Long id, Long itemId); |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mdm.api.item.dto; |
| | | |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import lombok.Data; |
| | | |
| | | import java.math.BigDecimal; |
| | | |
| | | @Schema(description = "RPC æå¡ - MDM ç©æåå· Response DTO") |
| | | @Data |
| | | public class MdmItemModelRespDTO { |
| | | |
| | | @Schema(description = "åå·ç¼å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") |
| | | private Long id; |
| | | |
| | | @Schema(description = "ç©æç¼å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") |
| | | private Long itemId; |
| | | |
| | | @Schema(description = "åå·åç§°", requiredMode = Schema.RequiredMode.REQUIRED, example = "4ç±³/æ ¹") |
| | | private String model; |
| | | |
| | | @Schema(description = "åå·è®¡éåä½ç¼å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "7") |
| | | private Long unitMeasureId; |
| | | |
| | | @Schema(description = "æ¢ç®æ¯çï¼1 åå·åä½ = N ç©æä¸»åä½", requiredMode = Schema.RequiredMode.REQUIRED, example = "4") |
| | | private BigDecimal unitMeasureRate; |
| | | |
| | | @Schema(description = "ç¶æ", requiredMode = Schema.RequiredMode.REQUIRED, example = "0") |
| | | private Integer status; |
| | | |
| | | @Schema(description = "夿³¨", example = "夿³¨ä¿¡æ¯") |
| | | private String remark; |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mdm.api.item; |
| | | |
| | | import cn.hutool.core.util.ObjUtil; |
| | | import cn.iocoder.yudao.framework.common.exception.ServiceException; |
| | | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemModelRespDTO; |
| | | import cn.iocoder.yudao.module.mdm.dal.dataobject.item.MdmItemModelDO; |
| | | import cn.iocoder.yudao.module.mdm.service.item.MdmItemModelService; |
| | | import jakarta.annotation.Resource; |
| | | import org.springframework.validation.annotation.Validated; |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | |
| | | import java.util.Collection; |
| | | import java.util.List; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| | | import static cn.iocoder.yudao.module.mdm.enums.ErrorCodeConstants.MDM_ITEM_MODEL_UNIT_MISMATCH; |
| | | |
| | | /** |
| | | * MDM ç©æåå· API å®ç°ç±» |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | @RestController |
| | | @RequestMapping(MdmItemModelApi.PREFIX) |
| | | @Validated |
| | | public class MdmItemModelApiImpl implements MdmItemModelApi { |
| | | |
| | | @Resource |
| | | private MdmItemModelService itemModelService; |
| | | |
| | | @Override |
| | | public CommonResult<MdmItemModelRespDTO> getItemModel(Long id) { |
| | | MdmItemModelDO itemModel = itemModelService.getItemModel(id); |
| | | return success(BeanUtils.toBean(itemModel, MdmItemModelRespDTO.class)); |
| | | } |
| | | |
| | | @Override |
| | | public CommonResult<List<MdmItemModelRespDTO>> getItemModelList(Collection<Long> ids) { |
| | | List<MdmItemModelDO> list = itemModelService.getItemModelList(ids); |
| | | return success(BeanUtils.toBean(list, MdmItemModelRespDTO.class)); |
| | | } |
| | | |
| | | @Override |
| | | public CommonResult<List<MdmItemModelRespDTO>> getItemModelListByItemId(Long itemId) { |
| | | List<MdmItemModelDO> list = itemModelService.getItemModelListByItemId(itemId); |
| | | return success(BeanUtils.toBean(list, MdmItemModelRespDTO.class)); |
| | | } |
| | | |
| | | @Override |
| | | public CommonResult<MdmItemModelRespDTO> validateItemModelExists(Long id) { |
| | | MdmItemModelDO itemModel = itemModelService.validateItemModelExists(id); |
| | | return success(BeanUtils.toBean(itemModel, MdmItemModelRespDTO.class)); |
| | | } |
| | | |
| | | @Override |
| | | public CommonResult<MdmItemModelRespDTO> validateItemModelExistsAndEnable(Long id, Long itemId) { |
| | | MdmItemModelDO itemModel = itemModelService.validateItemModelExistsAndEnable(id); |
| | | if (ObjUtil.notEqual(itemModel.getItemId(), itemId)) { |
| | | throw new ServiceException(MDM_ITEM_MODEL_UNIT_MISMATCH.getCode(), |
| | | String.format("æéåå·[%s](ID=%d)ä¸å±äºå½åç©æ(ID=%d)ï¼è¯·éæ°éæ©è¯¥ç©æçåå·", |
| | | itemModel.getModel(), itemModel.getId(), itemId)); |
| | | } |
| | | return success(BeanUtils.toBean(itemModel, MdmItemModelRespDTO.class)); |
| | | } |
| | | |
| | | } |
| | |
| | | @Schema(description = "计éåä½ç¼å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") |
| | | private Long unitMeasureId; |
| | | |
| | | @Schema(description = "è¾
åä½1ç¼å·", example = "2") |
| | | private Long unitMeasureId2; |
| | | |
| | | @Schema(description = "è¾
åä½1æ¢ç®æ¯ç", example = "12") |
| | | private BigDecimal unitMeasureRate1; |
| | | |
| | | @Schema(description = "è¾
åä½2ç¼å·", example = "3") |
| | | private Long unitMeasureId3; |
| | | |
| | | @Schema(description = "è¾
åä½2æ¢ç®æ¯ç", example = "100") |
| | | private BigDecimal unitMeasureRate2; |
| | | |
| | | @Schema(description = "åçç¼å·", example = "1") |
| | | private Long brandId; |
| | | |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mdm.controller.admin.item; |
| | | |
| | | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.module.mdm.controller.admin.item.vo.MdmItemModelPageReqVO; |
| | | import cn.iocoder.yudao.module.mdm.controller.admin.item.vo.MdmItemModelRespVO; |
| | | import cn.iocoder.yudao.module.mdm.controller.admin.item.vo.MdmItemModelSaveReqVO; |
| | | import cn.iocoder.yudao.module.mdm.dal.dataobject.item.MdmItemDO; |
| | | import cn.iocoder.yudao.module.mdm.dal.dataobject.item.MdmItemModelDO; |
| | | import cn.iocoder.yudao.module.mdm.dal.dataobject.unit.MdmUnitMeasureDO; |
| | | import cn.iocoder.yudao.module.mdm.service.item.MdmItemModelService; |
| | | import cn.iocoder.yudao.module.mdm.service.item.MdmItemService; |
| | | import cn.iocoder.yudao.module.mdm.service.unit.MdmUnitMeasureService; |
| | | import io.swagger.v3.oas.annotations.Operation; |
| | | import io.swagger.v3.oas.annotations.Parameter; |
| | | import io.swagger.v3.oas.annotations.tags.Tag; |
| | | import jakarta.annotation.Resource; |
| | | import jakarta.validation.Valid; |
| | | import org.springframework.security.access.prepost.PreAuthorize; |
| | | import org.springframework.validation.annotation.Validated; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import java.util.Collection; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| | | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; |
| | | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; |
| | | |
| | | @Tag(name = "管çåå° - MDM ç©æåå·ï¼åå· + 主è¾
å使¢ç®ï¼") |
| | | @RestController |
| | | @RequestMapping("/mdm/item-model") |
| | | @Validated |
| | | public class MdmItemModelController { |
| | | |
| | | @Resource |
| | | private MdmItemModelService itemModelService; |
| | | |
| | | @Resource |
| | | private MdmItemService itemService; |
| | | @Resource |
| | | private MdmUnitMeasureService unitMeasureService; |
| | | |
| | | @PostMapping("/create") |
| | | @Operation(summary = "åå»ºç©æåå·") |
| | | @PreAuthorize("@ss.hasPermission('mdm:item:create')") |
| | | public CommonResult<Long> createItemModel(@Valid @RequestBody MdmItemModelSaveReqVO createReqVO) { |
| | | return success(itemModelService.createItemModel(createReqVO)); |
| | | } |
| | | |
| | | @PutMapping("/update") |
| | | @Operation(summary = "æ´æ°ç©æåå·") |
| | | @PreAuthorize("@ss.hasPermission('mdm:item:update')") |
| | | public CommonResult<Boolean> updateItemModel(@Valid @RequestBody MdmItemModelSaveReqVO updateReqVO) { |
| | | itemModelService.updateItemModel(updateReqVO); |
| | | return success(true); |
| | | } |
| | | |
| | | @DeleteMapping("/delete") |
| | | @Operation(summary = "å é¤ç©æåå·") |
| | | @Parameter(name = "id", description = "åå·ç¼å·", required = true, example = "1024") |
| | | @PreAuthorize("@ss.hasPermission('mdm:item:delete')") |
| | | public CommonResult<Boolean> deleteItemModel(@RequestParam("id") Long id) { |
| | | itemModelService.deleteItemModel(id); |
| | | return success(true); |
| | | } |
| | | |
| | | @PostMapping("/save-list") |
| | | @Operation(summary = "å
¨éè¦çä¿åç©æçåå·å表") |
| | | @PreAuthorize("@ss.hasPermission('mdm:item:update')") |
| | | public CommonResult<Boolean> saveItemModelList(@RequestParam("itemId") Long itemId, |
| | | @RequestBody List<MdmItemModelSaveReqVO> modelList) { |
| | | itemModelService.saveItemModelList(itemId, modelList); |
| | | return success(true); |
| | | } |
| | | |
| | | @GetMapping("/get") |
| | | @Operation(summary = "è·å¾ç©æåå·") |
| | | @Parameter(name = "id", description = "åå·ç¼å·", required = true, example = "1024") |
| | | @PreAuthorize("@ss.hasPermission('mdm:item:query')") |
| | | public CommonResult<MdmItemModelRespVO> getItemModel(@RequestParam("id") Long id) { |
| | | MdmItemModelDO itemModel = itemModelService.getItemModel(id); |
| | | if (itemModel == null) { |
| | | return success(null); |
| | | } |
| | | return success(buildRespVOList(List.of(itemModel)).get(0)); |
| | | } |
| | | |
| | | @GetMapping("/list-by-item") |
| | | @Operation(summary = "è·å¾æå®ç©æçåå·å表") |
| | | @Parameter(name = "itemId", description = "ç©æç¼å·", required = true, example = "1") |
| | | @PreAuthorize("@ss.hasPermission('mdm:item:query')") |
| | | public CommonResult<List<MdmItemModelRespVO>> getItemModelListByItemId(@RequestParam("itemId") Long itemId) { |
| | | return success(buildRespVOList(itemModelService.getItemModelListByItemId(itemId))); |
| | | } |
| | | |
| | | @GetMapping("/list-by-items") |
| | | @Operation(summary = "è·å¾æå®å¤ä¸ªç©æçåå·å表") |
| | | @Parameter(name = "itemIds", description = "ç©æç¼å·å表", required = true) |
| | | @PreAuthorize("@ss.hasPermission('mdm:item:query')") |
| | | public CommonResult<List<MdmItemModelRespVO>> getItemModelListByItemIds(@RequestParam("itemIds") Collection<Long> itemIds) { |
| | | List<MdmItemModelDO> list = itemModelService.getItemModelListByItemIds(itemIds); |
| | | return success(buildRespVOList(list)); |
| | | } |
| | | |
| | | @GetMapping("/page") |
| | | @Operation(summary = "è·å¾ç©æåå·å页") |
| | | @PreAuthorize("@ss.hasPermission('mdm:item:query')") |
| | | public CommonResult<PageResult<MdmItemModelRespVO>> getItemModelPage(@Valid MdmItemModelPageReqVO pageReqVO) { |
| | | PageResult<MdmItemModelDO> pageResult = itemModelService.getItemModelPage(pageReqVO); |
| | | return success(new PageResult<>(buildRespVOList(pageResult.getList()), pageResult.getTotal())); |
| | | } |
| | | |
| | | private List<MdmItemModelRespVO> buildRespVOList(List<MdmItemModelDO> list) { |
| | | if (list == null || list.isEmpty()) { |
| | | return List.of(); |
| | | } |
| | | List<MdmItemModelRespVO> respList = BeanUtils.toBean(list, MdmItemModelRespVO.class); |
| | | |
| | | Map<Long, MdmItemDO> itemMap = convertMap(itemService.getItemList(convertSet(list, MdmItemModelDO::getItemId)), |
| | | MdmItemDO::getId); |
| | | Map<Long, MdmUnitMeasureDO> unitMap = convertMap( |
| | | unitMeasureService.getUnitMeasureList(convertSet(list, MdmItemModelDO::getUnitMeasureId)), |
| | | MdmUnitMeasureDO::getId); |
| | | |
| | | respList.forEach(resp -> { |
| | | MdmItemDO item = itemMap.get(resp.getItemId()); |
| | | if (item != null) { |
| | | resp.setItemCode(item.getCode()).setItemName(item.getName()); |
| | | } |
| | | MdmUnitMeasureDO unit = unitMap.get(resp.getUnitMeasureId()); |
| | | if (unit != null) { |
| | | resp.setUnitMeasureName(unit.getName()); |
| | | } |
| | | }); |
| | | return respList; |
| | | } |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mdm.controller.admin.item.vo; |
| | | |
| | | import cn.iocoder.yudao.framework.common.pojo.PageParam; |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import lombok.Data; |
| | | import lombok.EqualsAndHashCode; |
| | | import lombok.ToString; |
| | | |
| | | @Schema(description = "管çåå° - MDM ç©æåå·å页 Request VO") |
| | | @Data |
| | | @EqualsAndHashCode(callSuper = true) |
| | | @ToString(callSuper = true) |
| | | public class MdmItemModelPageReqVO extends PageParam { |
| | | |
| | | @Schema(description = "ç©æç¼å·", example = "1") |
| | | private Long itemId; |
| | | |
| | | @Schema(description = "åå·åç§°", example = "4ç±³/æ ¹") |
| | | private String model; |
| | | |
| | | @Schema(description = "ç¶æ", example = "0") |
| | | private Integer status; |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mdm.controller.admin.item.vo; |
| | | |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import lombok.Data; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.time.LocalDateTime; |
| | | |
| | | @Schema(description = "管çåå° - MDM ç©æåå· Response VO") |
| | | @Data |
| | | public class MdmItemModelRespVO { |
| | | |
| | | @Schema(description = "åå·ç¼å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") |
| | | private Long id; |
| | | |
| | | @Schema(description = "ç©æç¼å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") |
| | | private Long itemId; |
| | | |
| | | @Schema(description = "ç©æç¼ç ", example = "M001") |
| | | private String itemCode; |
| | | |
| | | @Schema(description = "ç©æåç§°", example = "ä¸éé¢ç®¡") |
| | | private String itemName; |
| | | |
| | | @Schema(description = "åå·åç§°", requiredMode = Schema.RequiredMode.REQUIRED, example = "4ç±³/æ ¹") |
| | | private String model; |
| | | |
| | | @Schema(description = "åå·è®¡éåä½ç¼å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "7") |
| | | private Long unitMeasureId; |
| | | |
| | | @Schema(description = "åå·è®¡éåä½åç§°", example = "æ ¹") |
| | | private String unitMeasureName; |
| | | |
| | | @Schema(description = "æ¢ç®æ¯çï¼1 åå·è®¡éåä½ = N ç©æä¸»è®¡éåä½", requiredMode = Schema.RequiredMode.REQUIRED, example = "4") |
| | | private BigDecimal unitMeasureRate; |
| | | |
| | | @Schema(description = "ç¶æ", requiredMode = Schema.RequiredMode.REQUIRED, example = "0") |
| | | private Integer status; |
| | | |
| | | @Schema(description = "夿³¨", example = "夿³¨") |
| | | private String remark; |
| | | |
| | | @Schema(description = "å建æ¶é´", requiredMode = Schema.RequiredMode.REQUIRED) |
| | | private LocalDateTime createTime; |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mdm.controller.admin.item.vo; |
| | | |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import jakarta.validation.constraints.DecimalMin; |
| | | import jakarta.validation.constraints.NotBlank; |
| | | import jakarta.validation.constraints.NotNull; |
| | | import jakarta.validation.constraints.Size; |
| | | import lombok.Data; |
| | | |
| | | import java.math.BigDecimal; |
| | | |
| | | @Schema(description = "管çåå° - MDM ç©æåå·æ°å¢/ä¿®æ¹ Request VO") |
| | | @Data |
| | | public class MdmItemModelSaveReqVO { |
| | | |
| | | @Schema(description = "åå·ç¼å·", example = "1024") |
| | | private Long id; |
| | | |
| | | @Schema(description = "ç©æç¼å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") |
| | | @NotNull(message = "ç©æç¼å·ä¸è½ä¸ºç©º") |
| | | private Long itemId; |
| | | |
| | | @Schema(description = "åå·åç§°", requiredMode = Schema.RequiredMode.REQUIRED, example = "4ç±³/æ ¹") |
| | | @NotBlank(message = "åå·åç§°ä¸è½ä¸ºç©º") |
| | | @Size(max = 128, message = "åå·åç§°é¿åº¦ä¸è½è¶
è¿ 128 个å符") |
| | | private String model; |
| | | |
| | | @Schema(description = "åå·è®¡éåä½ç¼å·ï¼è¯¥åå·ä¸åºå
¥åºå½å
¥ä½¿ç¨çåä½ï¼", requiredMode = Schema.RequiredMode.REQUIRED, example = "7") |
| | | @NotNull(message = "åå·è®¡éåä½ä¸è½ä¸ºç©º") |
| | | private Long unitMeasureId; |
| | | |
| | | @Schema(description = "æ¢ç®æ¯çï¼1 åå·è®¡éåä½ = N ç©æä¸»è®¡éåä½", requiredMode = Schema.RequiredMode.REQUIRED, example = "4") |
| | | @NotNull(message = "æ¢ç®æ¯çä¸è½ä¸ºç©º") |
| | | @DecimalMin(value = "0", inclusive = false, message = "æ¢ç®æ¯çå¿
é¡»å¤§äº 0") |
| | | private BigDecimal unitMeasureRate; |
| | | |
| | | @Schema(description = "ç¶æ", example = "0") |
| | | private Integer status; |
| | | |
| | | @Schema(description = "夿³¨", example = "夿³¨") |
| | | private String remark; |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mdm.dal.dataobject.item; |
| | | |
| | | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; |
| | | import cn.iocoder.yudao.module.mdm.dal.dataobject.unit.MdmUnitMeasureDO; |
| | | import com.baomidou.mybatisplus.annotation.KeySequence; |
| | | import com.baomidou.mybatisplus.annotation.TableId; |
| | | import com.baomidou.mybatisplus.annotation.TableName; |
| | | import lombok.*; |
| | | |
| | | import java.math.BigDecimal; |
| | | |
| | | /** |
| | | * MDM ç©æåå· DO |
| | | * |
| | | * åä¸ç©æå¯ç»´æ¤å¤ä¸ªåå·ï¼æ¯ä¸ªåå·åç¬é
ç½®ãåå·åä½ + æ¢ç®æ¯çãï¼ |
| | | * ç¨äºåºå
¥åºæ¶æåå·åä½å½å
¥ãç±ç³»ç»æ¢ç®æç©æä¸»å使°éè®°è´¦ã |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | @TableName("mdm_item_model") |
| | | @KeySequence("mdm_item_model_seq") |
| | | @Data |
| | | @EqualsAndHashCode(callSuper = true) |
| | | @ToString(callSuper = true) |
| | | @Builder |
| | | @NoArgsConstructor |
| | | @AllArgsConstructor |
| | | public class MdmItemModelDO extends BaseDO { |
| | | |
| | | /** |
| | | * åå·ç¼å· |
| | | */ |
| | | @TableId |
| | | private Long id; |
| | | |
| | | /** |
| | | * ç©æç¼å· |
| | | * |
| | | * å
³è {@link MdmItemDO#getId()} |
| | | */ |
| | | private Long itemId; |
| | | |
| | | /** |
| | | * åå·åç§° |
| | | * |
| | | * ä¾å¦ï¼4ç±³/æ ¹ |
| | | */ |
| | | private String model; |
| | | |
| | | /** |
| | | * åå·è®¡éåä½ç¼å· |
| | | * |
| | | * å
³è {@link MdmUnitMeasureDO#getId()} |
| | | * ä¾å¦ï¼æ ¹ |
| | | */ |
| | | private Long unitMeasureId; |
| | | |
| | | /** |
| | | * æ¢ç®æ¯ç |
| | | * |
| | | * 1 åå·è®¡éåä½ = N ç©æä¸»è®¡éåä½ãä¾å¦ 1æ ¹ = 4ç±³ï¼åæ¯ç为 4 |
| | | */ |
| | | private BigDecimal unitMeasureRate; |
| | | |
| | | /** |
| | | * ç¶æ |
| | | * |
| | | * æä¸¾ {@link cn.iocoder.yudao.framework.common.enums.CommonStatusEnum} |
| | | */ |
| | | private Integer status; |
| | | |
| | | /** |
| | | * 夿³¨ |
| | | */ |
| | | private String remark; |
| | | |
| | | } |
| | |
| | | .eqIfPresent(MdmItemDO::getBrandId, reqVO.getBrandId()) |
| | | .eqIfPresent(MdmItemDO::getStatus, reqVO.getStatus()) |
| | | .betweenIfPresent(MdmItemDO::getCreateTime, reqVO.getCreateTime()) |
| | | .orderByDesc(MdmItemDO::getId)); |
| | | .orderByAsc(MdmItemDO::getCategoryId) |
| | | .orderByAsc(MdmItemDO::getCode)); |
| | | } |
| | | |
| | | default List<MdmItemDO> selectList(MdmItemPageReqVO reqVO, Collection<Long> categoryIds) { |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mdm.dal.mysql.item; |
| | | |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
| | | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
| | | import cn.iocoder.yudao.module.mdm.controller.admin.item.vo.MdmItemModelPageReqVO; |
| | | import cn.iocoder.yudao.module.mdm.dal.dataobject.item.MdmItemModelDO; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | |
| | | import java.util.Collection; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * MDM ç©æåå· Mapper |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | @Mapper |
| | | public interface MdmItemModelMapper extends BaseMapperX<MdmItemModelDO> { |
| | | |
| | | default List<MdmItemModelDO> selectListByItemId(Long itemId) { |
| | | return selectList(new LambdaQueryWrapperX<MdmItemModelDO>() |
| | | .eq(MdmItemModelDO::getItemId, itemId) |
| | | .orderByAsc(MdmItemModelDO::getId)); |
| | | } |
| | | |
| | | default List<MdmItemModelDO> selectListByItemIds(Collection<Long> itemIds) { |
| | | return selectList(MdmItemModelDO::getItemId, itemIds); |
| | | } |
| | | |
| | | default MdmItemModelDO selectByItemIdAndModel(Long itemId, String model) { |
| | | return selectOne(new LambdaQueryWrapperX<MdmItemModelDO>() |
| | | .eq(MdmItemModelDO::getItemId, itemId) |
| | | .eq(MdmItemModelDO::getModel, model)); |
| | | } |
| | | |
| | | default int deleteByItemId(Long itemId) { |
| | | return delete(MdmItemModelDO::getItemId, itemId); |
| | | } |
| | | |
| | | default PageResult<MdmItemModelDO> selectPage(MdmItemModelPageReqVO reqVO) { |
| | | return selectPage(reqVO, new LambdaQueryWrapperX<MdmItemModelDO>() |
| | | .eqIfPresent(MdmItemModelDO::getItemId, reqVO.getItemId()) |
| | | .likeIfPresent(MdmItemModelDO::getModel, reqVO.getModel()) |
| | | .eqIfPresent(MdmItemModelDO::getStatus, reqVO.getStatus()) |
| | | .orderByAsc(MdmItemModelDO::getId)); |
| | | } |
| | | |
| | | } |
| | |
| | | ErrorCode MDM_ITEM_SKU_CODE_DUPLICATE = new ErrorCode(1_050_006, "SKUç¼ç å·²åå¨"); |
| | | ErrorCode MDM_ITEM_EXISTS_REFERENCE = new ErrorCode(1_050_007, "ç©æå·²è¢«ä¸å¡å¼ç¨ï¼æ æ³å é¤"); |
| | | ErrorCode MDM_ITEM_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_050_008, "导å
¥çç©ææ°æ®ä¸è½ä¸ºç©º"); |
| | | ErrorCode MDM_ITEM_MODEL_NOT_EXISTS = new ErrorCode(1_050_009, "ç©æåå·ä¸åå¨"); |
| | | ErrorCode MDM_ITEM_MODEL_IS_DISABLE = new ErrorCode(1_050_010, "ç©æåå·å·²ç¦ç¨"); |
| | | ErrorCode MDM_ITEM_MODEL_NAME_DUPLICATE = new ErrorCode(1_050_011, "è¯¥ç©æä¸å·²åå¨åå·åç§°ã{}ãï¼è¯·ä¿®æ¹åå·åç§°åéè¯"); |
| | | ErrorCode MDM_ITEM_MODEL_RATE_INVALID = new ErrorCode(1_050_012, "åå·ã{}ãçæ¢ç®æ¯çã{}ãä¸åçï¼1 个åå·è®¡éåä½å¿
须对åºå¤§äº 0 çç©æä¸»å使°éï¼è¯·å¡«åå¤§äº 0 çæ¢ç®æ¯ç"); |
| | | ErrorCode MDM_ITEM_MODEL_UNIT_MISMATCH = new ErrorCode(1_050_013, "åå·ç计éåä½ä¸æéåä½ä¸ä¸è´"); |
| | | ErrorCode MDM_ITEM_MODEL_RATE_MUST_BE_ONE = new ErrorCode(1_050_014, "åå·ã{}ãç计éåä½ã{}ãä¸ç©æä¸»åä½ã{}ãç¸åï¼æ¢ç®æ¯çå¿
须填 1ï¼è¯·ä¿®æ¹æ¢ç®æ¯çææ¹éå
¶ä»è®¡éåä½"); |
| | | |
| | | // ========== ç©æåç±»ç¸å
³ 1-050-051 ~ 1-050-100 ========== |
| | | ErrorCode MDM_ITEM_CATEGORY_NOT_EXISTS = new ErrorCode(1_050_051, "ç©æåç±»ä¸åå¨"); |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mdm.service.item; |
| | | |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.module.mdm.controller.admin.item.vo.MdmItemModelPageReqVO; |
| | | import cn.iocoder.yudao.module.mdm.controller.admin.item.vo.MdmItemModelSaveReqVO; |
| | | import cn.iocoder.yudao.module.mdm.dal.dataobject.item.MdmItemModelDO; |
| | | |
| | | import java.util.Collection; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * MDM ç©æåå· Service æ¥å£ |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | public interface MdmItemModelService { |
| | | |
| | | /** |
| | | * åå»ºç©æåå· |
| | | * |
| | | * @param createReqVO åå»ºä¿¡æ¯ |
| | | * @return åå·ç¼å· |
| | | */ |
| | | Long createItemModel(MdmItemModelSaveReqVO createReqVO); |
| | | |
| | | /** |
| | | * æ´æ°ç©æåå· |
| | | * |
| | | * @param updateReqVO æ´æ°ä¿¡æ¯ |
| | | */ |
| | | void updateItemModel(MdmItemModelSaveReqVO updateReqVO); |
| | | |
| | | /** |
| | | * å é¤ç©æåå· |
| | | * |
| | | * @param id åå·ç¼å· |
| | | */ |
| | | void deleteItemModel(Long id); |
| | | |
| | | /** |
| | | * å
¨éè¦çä¿åç©æçåå·å表ï¼å
å åæï¼ |
| | | * |
| | | * @param itemId ç©æç¼å· |
| | | * @param modelList åå·å表 |
| | | */ |
| | | void saveItemModelList(Long itemId, List<MdmItemModelSaveReqVO> modelList); |
| | | |
| | | /** |
| | | * è·å¾ç©æåå· |
| | | * |
| | | * @param id åå·ç¼å· |
| | | * @return ç©æåå· |
| | | */ |
| | | MdmItemModelDO getItemModel(Long id); |
| | | |
| | | /** |
| | | * è·å¾ç©æåå·å表 |
| | | * |
| | | * @param ids åå·ç¼å·å表 |
| | | * @return ç©æåå·å表 |
| | | */ |
| | | List<MdmItemModelDO> getItemModelList(Collection<Long> ids); |
| | | |
| | | /** |
| | | * è·å¾æå®ç©æçåå·å表 |
| | | * |
| | | * @param itemId ç©æç¼å· |
| | | * @return ç©æåå·å表 |
| | | */ |
| | | List<MdmItemModelDO> getItemModelListByItemId(Long itemId); |
| | | |
| | | /** |
| | | * è·å¾æå®å¤ä¸ªç©æçåå·å表 |
| | | * |
| | | * @param itemIds ç©æç¼å·å表 |
| | | * @return ç©æåå·å表 |
| | | */ |
| | | List<MdmItemModelDO> getItemModelListByItemIds(Collection<Long> itemIds); |
| | | |
| | | /** |
| | | * è·å¾ç©æåå·å页 |
| | | * |
| | | * @param pageReqVO å页æ¥è¯¢ |
| | | * @return ç©æåå·å页 |
| | | */ |
| | | PageResult<MdmItemModelDO> getItemModelPage(MdmItemModelPageReqVO pageReqVO); |
| | | |
| | | /** |
| | | * æ ¡éªç©æåå·åå¨ |
| | | * |
| | | * @param id åå·ç¼å· |
| | | * @return ç©æåå· |
| | | */ |
| | | MdmItemModelDO validateItemModelExists(Long id); |
| | | |
| | | /** |
| | | * æ ¡éªç©æåå·åå¨ä¸å¯ç¨ |
| | | * |
| | | * @param id åå·ç¼å· |
| | | * @return ç©æåå· |
| | | */ |
| | | MdmItemModelDO validateItemModelExistsAndEnable(Long id); |
| | | |
| | | /** |
| | | * å 餿å®ç©æçå
¨é¨åå· |
| | | * |
| | | * @param itemId ç©æç¼å· |
| | | */ |
| | | void deleteItemModelListByItemId(Long itemId); |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mdm.service.item; |
| | | |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.hutool.core.util.ObjUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.module.mdm.controller.admin.item.vo.MdmItemModelPageReqVO; |
| | | import cn.iocoder.yudao.module.mdm.controller.admin.item.vo.MdmItemModelSaveReqVO; |
| | | import cn.iocoder.yudao.module.mdm.dal.dataobject.item.MdmItemDO; |
| | | import cn.iocoder.yudao.module.mdm.dal.dataobject.item.MdmItemModelDO; |
| | | import cn.iocoder.yudao.module.mdm.dal.dataobject.unit.MdmUnitMeasureDO; |
| | | import cn.iocoder.yudao.module.mdm.dal.mysql.item.MdmItemModelMapper; |
| | | import cn.iocoder.yudao.module.mdm.service.unit.MdmUnitMeasureService; |
| | | import jakarta.annotation.Resource; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.validation.annotation.Validated; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.Collection; |
| | | import java.util.Collections; |
| | | import java.util.List; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| | | import static cn.iocoder.yudao.module.mdm.enums.ErrorCodeConstants.*; |
| | | |
| | | /** |
| | | * MDM ç©æåå· Service å®ç°ç±» |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | @Service |
| | | @Validated |
| | | public class MdmItemModelServiceImpl implements MdmItemModelService { |
| | | |
| | | @Resource |
| | | private MdmItemModelMapper itemModelMapper; |
| | | |
| | | @Resource |
| | | private MdmItemService itemService; |
| | | @Resource |
| | | private MdmUnitMeasureService unitMeasureService; |
| | | |
| | | @Override |
| | | public Long createItemModel(MdmItemModelSaveReqVO createReqVO) { |
| | | validateItemModelSaveData(null, createReqVO); |
| | | |
| | | MdmItemModelDO itemModel = BeanUtils.toBean(createReqVO, MdmItemModelDO.class); |
| | | if (itemModel.getStatus() == null) { |
| | | itemModel.setStatus(CommonStatusEnum.ENABLE.getStatus()); |
| | | } |
| | | itemModelMapper.insert(itemModel); |
| | | return itemModel.getId(); |
| | | } |
| | | |
| | | @Override |
| | | public void updateItemModel(MdmItemModelSaveReqVO updateReqVO) { |
| | | validateItemModelExists(updateReqVO.getId()); |
| | | validateItemModelSaveData(updateReqVO.getId(), updateReqVO); |
| | | |
| | | itemModelMapper.updateById(BeanUtils.toBean(updateReqVO, MdmItemModelDO.class)); |
| | | } |
| | | |
| | | private void validateItemModelSaveData(Long id, MdmItemModelSaveReqVO reqVO) { |
| | | // æ ¡éªç©æåå¨ |
| | | MdmItemDO item = itemService.validateItemExists(reqVO.getItemId()); |
| | | // æ ¡éªåå·åä½åå¨ |
| | | unitMeasureService.validateUnitMeasureExists(reqVO.getUnitMeasureId()); |
| | | // æ ¡éªæ¢ç®æ¯çå¤§äº 0 |
| | | if (reqVO.getUnitMeasureRate() == null |
| | | || reqVO.getUnitMeasureRate().compareTo(BigDecimal.ZERO) <= 0) { |
| | | throw exception(MDM_ITEM_MODEL_RATE_INVALID, reqVO.getModel(), reqVO.getUnitMeasureRate()); |
| | | } |
| | | // æ ¡éªåä¸ç©æä¸åå·åç§°å¯ä¸ |
| | | if (StrUtil.isNotBlank(reqVO.getModel())) { |
| | | MdmItemModelDO exists = itemModelMapper.selectByItemIdAndModel(reqVO.getItemId(), reqVO.getModel()); |
| | | if (exists != null && ObjUtil.notEqual(exists.getId(), id)) { |
| | | throw exception(MDM_ITEM_MODEL_NAME_DUPLICATE, reqVO.getModel()); |
| | | } |
| | | } |
| | | // åå·åä½ä¸ç©æä¸»åä½ä¸è´æ¶ï¼æ¯çå¿
须为 1ï¼å¦åæ¢ç®æ æä¹ä¸æè¯¯é
ï¼ |
| | | if (ObjUtil.equal(item.getUnitMeasureId(), reqVO.getUnitMeasureId()) |
| | | && reqVO.getUnitMeasureRate().compareTo(BigDecimal.ONE) != 0) { |
| | | throw exception(MDM_ITEM_MODEL_RATE_MUST_BE_ONE, reqVO.getModel(), |
| | | unitName(reqVO.getUnitMeasureId()), unitName(item.getUnitMeasureId())); |
| | | } |
| | | } |
| | | |
| | | private String unitName(Long unitMeasureId) { |
| | | MdmUnitMeasureDO unit = unitMeasureService.getUnitMeasure(unitMeasureId); |
| | | return unit != null ? unit.getName() : "ID=" + unitMeasureId; |
| | | } |
| | | |
| | | @Override |
| | | public void deleteItemModel(Long id) { |
| | | validateItemModelExists(id); |
| | | itemModelMapper.deleteById(id); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void saveItemModelList(Long itemId, List<MdmItemModelSaveReqVO> modelList) { |
| | | itemService.validateItemExists(itemId); |
| | | // ç¬¬ä¸æ¥ï¼å 餿§çåå· |
| | | itemModelMapper.deleteByItemId(itemId); |
| | | if (CollUtil.isEmpty(modelList)) { |
| | | return; |
| | | } |
| | | // ç¬¬äºæ¥ï¼æå
¥æ°çåå· |
| | | for (MdmItemModelSaveReqVO reqVO : modelList) { |
| | | reqVO.setItemId(itemId); |
| | | reqVO.setId(null); |
| | | createItemModel(reqVO); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public MdmItemModelDO getItemModel(Long id) { |
| | | return itemModelMapper.selectById(id); |
| | | } |
| | | |
| | | @Override |
| | | public List<MdmItemModelDO> getItemModelList(Collection<Long> ids) { |
| | | if (CollUtil.isEmpty(ids)) { |
| | | return Collections.emptyList(); |
| | | } |
| | | return itemModelMapper.selectBatchIds(ids); |
| | | } |
| | | |
| | | @Override |
| | | public List<MdmItemModelDO> getItemModelListByItemId(Long itemId) { |
| | | return itemModelMapper.selectListByItemId(itemId); |
| | | } |
| | | |
| | | @Override |
| | | public List<MdmItemModelDO> getItemModelListByItemIds(Collection<Long> itemIds) { |
| | | if (CollUtil.isEmpty(itemIds)) { |
| | | return Collections.emptyList(); |
| | | } |
| | | return itemModelMapper.selectListByItemIds(itemIds); |
| | | } |
| | | |
| | | @Override |
| | | public PageResult<MdmItemModelDO> getItemModelPage(MdmItemModelPageReqVO pageReqVO) { |
| | | return itemModelMapper.selectPage(pageReqVO); |
| | | } |
| | | |
| | | @Override |
| | | public MdmItemModelDO validateItemModelExists(Long id) { |
| | | MdmItemModelDO itemModel = itemModelMapper.selectById(id); |
| | | if (itemModel == null) { |
| | | throw exception(MDM_ITEM_MODEL_NOT_EXISTS); |
| | | } |
| | | return itemModel; |
| | | } |
| | | |
| | | @Override |
| | | public MdmItemModelDO validateItemModelExistsAndEnable(Long id) { |
| | | MdmItemModelDO itemModel = validateItemModelExists(id); |
| | | if (CommonStatusEnum.isDisable(itemModel.getStatus())) { |
| | | throw exception(MDM_ITEM_MODEL_IS_DISABLE); |
| | | } |
| | | return itemModel; |
| | | } |
| | | |
| | | @Override |
| | | public void deleteItemModelListByItemId(Long itemId) { |
| | | itemModelMapper.deleteByItemId(itemId); |
| | | } |
| | | |
| | | } |
| | |
| | | return success(true); |
| | | } |
| | | |
| | | @DeleteMapping("/delete-list") |
| | | @Operation(summary = "æ¹éå é¤è®¾å¤") |
| | | @Parameter(name = "ids", description = "ç¼å·å表", required = true, example = "1024,2048") |
| | | @PreAuthorize("@ss.hasPermission('mes:dv-machinery:delete')") |
| | | public CommonResult<Boolean> deleteMachineryList(@RequestParam("ids") List<Long> ids) { |
| | | machineryService.deleteMachineryList(ids); |
| | | return success(true); |
| | | } |
| | | |
| | | @GetMapping("/get") |
| | | @Operation(summary = "è·å¾è®¾å¤") |
| | | @Parameter(name = "id", description = "ç¼å·", required = true, example = "1024") |
| | |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.itemreceipt.vo.line.MesWmItemReceiptLineRespVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.itemreceipt.vo.line.MesWmItemReceiptLineSaveReqVO; |
| | | import cn.iocoder.yudao.module.mdm.api.item.MdmItemApi; |
| | | import cn.iocoder.yudao.module.mdm.api.item.MdmItemModelApi; |
| | | import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemModelRespDTO; |
| | | import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemRespDTO; |
| | | |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.itemreceipt.MesWmItemReceiptDO; |
| | |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import java.util.Collections; |
| | | import java.util.HashSet; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | import java.util.stream.Collectors; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| | |
| | | private MesWmItemReceiptLineService itemReceiptLineService; |
| | | @Resource |
| | | private MdmItemApi mdmItemApi; |
| | | @Resource |
| | | private MdmItemModelApi mdmItemModelApi; |
| | | @Resource |
| | | private MdmUnitMeasureApi mdmUnitMeasureApi; |
| | | @Resource |
| | |
| | | // 1. è·å¾å
³èæ°æ® |
| | | Map<Long, MdmItemRespDTO> itemMap = mdmItemApi.getItemMap( |
| | | convertSet(list, MesWmItemReceiptLineDO::getItemId)); |
| | | Map<Long, MdmUnitMeasureRespDTO> unitMeasureMap = mdmUnitMeasureApi.getUnitMeasureList( |
| | | convertSet(itemMap.values(), MdmItemRespDTO::getUnitMeasureId)).getCheckedData() |
| | | .stream().collect(Collectors.toMap(MdmUnitMeasureRespDTO::getId, e -> e)); |
| | | Set<Long> unitMeasureIds = new HashSet<>(convertSet(itemMap.values(), MdmItemRespDTO::getUnitMeasureId)); |
| | | unitMeasureIds.addAll(convertSet(list, MesWmItemReceiptLineDO::getEnterUnitMeasureId)); |
| | | Map<Long, MdmUnitMeasureRespDTO> unitMeasureMap = mdmUnitMeasureApi.getUnitMeasureList(unitMeasureIds) |
| | | .getCheckedData().stream().collect(Collectors.toMap(MdmUnitMeasureRespDTO::getId, e -> e)); |
| | | Map<Long, MesWmItemReceiptDO> receiptMap = itemReceiptService.getItemReceiptMap( |
| | | convertSet(list, MesWmItemReceiptLineDO::getReceiptId)); |
| | | Map<Long, MdmItemModelRespDTO> itemModelMap = mdmItemModelApi.getItemModelMap( |
| | | convertSet(list, MesWmItemReceiptLineDO::getItemModelId)); |
| | | // 2. æå»ºç»æ |
| | | return BeanUtils.toBean(list, MesWmItemReceiptLineRespVO.class, vo -> { |
| | | MapUtils.findAndThen(itemMap, vo.getItemId(), item -> { |
| | | vo.setItemCode(item.getCode()).setItemName(item.getName()).setSpecification(item.getSpecification()); |
| | | vo.setItemCode(item.getCode()).setItemName(item.getName()).setSpecification(item.getSpecification()) |
| | | .setUnitMeasureId(item.getUnitMeasureId()); |
| | | MapUtils.findAndThen(unitMeasureMap, item.getUnitMeasureId(), |
| | | unitMeasure -> vo.setUnitMeasureName(unitMeasure.getName())); |
| | | }); |
| | | MapUtils.findAndThen(unitMeasureMap, vo.getEnterUnitMeasureId(), |
| | | unitMeasure -> vo.setEnterUnitMeasureName(unitMeasure.getName())); |
| | | MapUtils.findAndThen(itemModelMap, vo.getItemModelId(), |
| | | itemModel -> vo.setItemModel(itemModel.getModel())); |
| | | MapUtils.findAndThen(receiptMap, vo.getReceiptId(), receipt -> |
| | | vo.setReceiptCode(receipt.getCode()).setPurchaseOrderCode(receipt.getPurchaseOrderCode())); |
| | | }); |
| | |
| | | @Schema(description = "è§æ ¼åå·", example = "10mm*100mm") |
| | | private String specification; |
| | | |
| | | @Schema(description = "计éåä½åç§°", example = "åå
") |
| | | @Schema(description = "主计éåä½ç¼å·ï¼ç©æä¸»åä½ï¼", example = "1") |
| | | private Long unitMeasureId; |
| | | |
| | | @Schema(description = "主计éåä½åç§°ï¼ç©æä¸»åä½ï¼", example = "ç±³") |
| | | private String unitMeasureName; |
| | | |
| | | @Schema(description = "å
¥åºæ°é", example = "500.00") |
| | | @Schema(description = "ç©æåå·ç¼å·", example = "1") |
| | | private Long itemModelId; |
| | | |
| | | @Schema(description = "ç©æåå·åç§°", example = "4ç±³/æ ¹") |
| | | private String itemModel; |
| | | |
| | | @Schema(description = "å½å
¥åä½ç¼å·", example = "7") |
| | | private Long enterUnitMeasureId; |
| | | |
| | | @Schema(description = "å½å
¥åä½åç§°", example = "æ ¹") |
| | | private String enterUnitMeasureName; |
| | | |
| | | @Schema(description = "å½å
¥æ°éï¼æå½å
¥åä½è®¡ï¼", example = "10.00") |
| | | private BigDecimal enterQuantity; |
| | | |
| | | @Schema(description = "å
¥åºæ°éï¼ç©æä¸»åä½å£å¾ï¼", example = "40.00") |
| | | private BigDecimal receivedQuantity; |
| | | |
| | | @Schema(description = "æ¹æ¬¡ç¼å·", example = "1") |
| | |
| | | @NotNull(message = "ç©æç¼å·ä¸è½ä¸ºç©º") |
| | | private Long itemId; |
| | | |
| | | @Schema(description = "å
¥åºæ°é", requiredMode = Schema.RequiredMode.REQUIRED, example = "500.00") |
| | | @NotNull(message = "å
¥åºæ°éä¸è½ä¸ºç©º") |
| | | @Schema(description = "ç©æåå·ç¼å·ï¼éæ©åå·åæå
¶åä½ä¸æ¢ç®æ¯çæ¢ç®ä¸ºä¸»å使°éï¼", example = "1") |
| | | private Long itemModelId; |
| | | |
| | | @Schema(description = "å½å
¥åä½ç¼å·ï¼ä¸ä¼ æä¼ ç©æä¸»å使¶æä¸»åä½å½å
¥ï¼", example = "7") |
| | | private Long enterUnitMeasureId; |
| | | |
| | | @Schema(description = "å½å
¥æ°éï¼æå½å
¥åä½è®¡ï¼ç³»ç»æ®æ¤æ¢ç®åºå
¥åºæ°éï¼", example = "10.00") |
| | | @DecimalMin(value = "0", inclusive = false, message = "å½å
¥æ°éå¿
é¡»å¤§äº 0") |
| | | private BigDecimal enterQuantity; |
| | | |
| | | @Schema(description = "å
¥åºæ°éï¼ç©æä¸»åä½å£å¾ï¼ä¼ äºå½å
¥æ°éæ¶ç±ç³»ç»æ¢ç®ï¼æ éå¡«åï¼", example = "40.00") |
| | | @DecimalMin(value = "0", inclusive = false, message = "å
¥åºæ°éå¿
é¡»å¤§äº 0") |
| | | private BigDecimal receivedQuantity; |
| | | |
| | |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.miscissue.vo.line.MesWmMiscIssueLineRespVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.miscissue.vo.line.MesWmMiscIssueLineSaveReqVO; |
| | | import cn.iocoder.yudao.module.mdm.api.item.MdmItemApi; |
| | | import cn.iocoder.yudao.module.mdm.api.item.MdmItemModelApi; |
| | | import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemModelRespDTO; |
| | | import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemRespDTO; |
| | | |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.miscissue.MesWmMiscIssueLineDO; |
| | |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import java.util.Collections; |
| | | import java.util.HashSet; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | import java.util.stream.Collectors; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| | |
| | | private MesWmMiscIssueLineService miscIssueLineService; |
| | | @Resource |
| | | private MdmItemApi mdmItemApi; |
| | | @Resource |
| | | private MdmItemModelApi mdmItemModelApi; |
| | | @Resource |
| | | private MdmUnitMeasureApi mdmUnitMeasureApi; |
| | | @Resource |
| | |
| | | // 1. è·å¾å
³èæ°æ® |
| | | Map<Long, MdmItemRespDTO> itemMap = mdmItemApi.getItemMap( |
| | | convertSet(list, MesWmMiscIssueLineDO::getItemId)); |
| | | Map<Long, MdmUnitMeasureRespDTO> unitMeasureMap = mdmUnitMeasureApi.getUnitMeasureList( |
| | | convertSet(itemMap.values(), MdmItemRespDTO::getUnitMeasureId)).getCheckedData() |
| | | .stream().collect(Collectors.toMap(MdmUnitMeasureRespDTO::getId, e -> e)); |
| | | Set<Long> unitMeasureIds = new HashSet<>(convertSet(itemMap.values(), MdmItemRespDTO::getUnitMeasureId)); |
| | | unitMeasureIds.addAll(convertSet(list, MesWmMiscIssueLineDO::getEnterUnitMeasureId)); |
| | | Map<Long, MdmUnitMeasureRespDTO> unitMeasureMap = mdmUnitMeasureApi.getUnitMeasureList(unitMeasureIds) |
| | | .getCheckedData().stream().collect(Collectors.toMap(MdmUnitMeasureRespDTO::getId, e -> e)); |
| | | Map<Long, MdmItemModelRespDTO> itemModelMap = mdmItemModelApi.getItemModelMap( |
| | | convertSet(list, MesWmMiscIssueLineDO::getItemModelId)); |
| | | Map<Long, MesWmWarehouseDO> warehouseMap = warehouseService.getWarehouseMap( |
| | | convertSet(list, MesWmMiscIssueLineDO::getWarehouseId)); |
| | | Map<Long, MesWmWarehouseLocationDO> locationMap = warehouseLocationService.getWarehouseLocationMap( |
| | |
| | | // 2. æå»ºç»æ |
| | | return BeanUtils.toBean(list, MesWmMiscIssueLineRespVO.class, vo -> { |
| | | MapUtils.findAndThen(itemMap, vo.getItemId(), item -> { |
| | | vo.setItemCode(item.getCode()).setItemName(item.getName()).setSpecification(item.getSpecification()); |
| | | vo.setItemCode(item.getCode()).setItemName(item.getName()).setSpecification(item.getSpecification()) |
| | | .setUnitMeasureId(item.getUnitMeasureId()); |
| | | MapUtils.findAndThen(unitMeasureMap, item.getUnitMeasureId(), |
| | | unitMeasure -> vo.setUnitMeasureName(unitMeasure.getName())); |
| | | }); |
| | | MapUtils.findAndThen(unitMeasureMap, vo.getEnterUnitMeasureId(), |
| | | unitMeasure -> vo.setEnterUnitMeasureName(unitMeasure.getName())); |
| | | MapUtils.findAndThen(itemModelMap, vo.getItemModelId(), |
| | | itemModel -> vo.setItemModel(itemModel.getModel())); |
| | | MapUtils.findAndThen(warehouseMap, vo.getWarehouseId(), warehouse -> vo.setWarehouseName(warehouse.getName())); |
| | | MapUtils.findAndThen(locationMap, vo.getLocationId(), location -> vo.setLocationName(location.getName())); |
| | | MapUtils.findAndThen(areaMap, vo.getAreaId(), area -> vo.setAreaName(area.getName())); |
| | |
| | | @Schema(description = "è§æ ¼åå·", example = "10mm*100mm") |
| | | private String specification; |
| | | |
| | | @Schema(description = "计éåä½åç§°", example = "åå
") |
| | | @Schema(description = "主计éåä½ç¼å·ï¼ç©æä¸»åä½ï¼", example = "1") |
| | | private Long unitMeasureId; |
| | | |
| | | @Schema(description = "主计éåä½åç§°ï¼ç©æä¸»åä½ï¼", example = "åå
") |
| | | private String unitMeasureName; |
| | | |
| | | @Schema(description = "åºåºæ°é", example = "100.00") |
| | | @Schema(description = "ç©æåå·ç¼å·", example = "1") |
| | | private Long itemModelId; |
| | | |
| | | @Schema(description = "ç©æåå·åç§°", example = "4ç±³/æ ¹") |
| | | private String itemModel; |
| | | |
| | | @Schema(description = "å½å
¥åä½ç¼å·", example = "7") |
| | | private Long enterUnitMeasureId; |
| | | |
| | | @Schema(description = "å½å
¥åä½åç§°", example = "æ ¹") |
| | | private String enterUnitMeasureName; |
| | | |
| | | @Schema(description = "å½å
¥æ°éï¼æå½å
¥åä½è®¡ï¼", example = "10.00") |
| | | private BigDecimal enterQuantity; |
| | | |
| | | @Schema(description = "åºåºæ°éï¼ç©æä¸»åä½å£å¾ï¼", example = "100.00") |
| | | private BigDecimal quantity; |
| | | |
| | | @Schema(description = "æ¹æ¬¡ç¼å·", example = "1") |
| | |
| | | @NotNull(message = "ç©æç¼å·ä¸è½ä¸ºç©º") |
| | | private Long itemId; |
| | | |
| | | @Schema(description = "åºåºæ°é", requiredMode = Schema.RequiredMode.REQUIRED, example = "100.00") |
| | | @NotNull(message = "åºåºæ°éä¸è½ä¸ºç©º") |
| | | @Schema(description = "ç©æåå·ç¼å·ï¼éæ©åå·åæå
¶åä½ä¸æ¢ç®æ¯çæ¢ç®ä¸ºä¸»å使°éï¼", example = "1") |
| | | private Long itemModelId; |
| | | |
| | | @Schema(description = "å½å
¥åä½ç¼å·ï¼ä¸ä¼ æä¼ ç©æä¸»å使¶æä¸»åä½å½å
¥ï¼", example = "7") |
| | | private Long enterUnitMeasureId; |
| | | |
| | | @Schema(description = "å½å
¥æ°éï¼æå½å
¥åä½è®¡ï¼ç³»ç»æ®æ¤æ¢ç®åºå
¥åºæ°éï¼", example = "10.00") |
| | | @DecimalMin(value = "0", inclusive = false, message = "å½å
¥æ°éå¿
é¡»å¤§äº 0") |
| | | private BigDecimal enterQuantity; |
| | | |
| | | @Schema(description = "åºåºæ°éï¼ç©æä¸»åä½å£å¾ï¼ä¼ äºå½å
¥æ°éæ¶ç±ç³»ç»æ¢ç®ï¼æ éå¡«åï¼", example = "100.00") |
| | | @DecimalMin(value = "0.01", message = "åºåºæ°éå¿
须大äº0") |
| | | private BigDecimal quantity; |
| | | |
| | |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.outsourceissue.vo.line.MesWmOutsourceIssueLineRespVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.outsourceissue.vo.line.MesWmOutsourceIssueLineSaveReqVO; |
| | | import cn.iocoder.yudao.module.mdm.api.item.MdmItemApi; |
| | | import cn.iocoder.yudao.module.mdm.api.item.MdmItemModelApi; |
| | | import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemModelRespDTO; |
| | | import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemRespDTO; |
| | | |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.batch.MesWmBatchDO; |
| | |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import java.util.Collections; |
| | | import java.util.HashSet; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.stream.Collectors; |
| | |
| | | private MesWmOutsourceIssueLineService outsourceIssueLineService; |
| | | @Resource |
| | | private MdmItemApi mdmItemApi; |
| | | @Resource |
| | | private MdmItemModelApi mdmItemModelApi; |
| | | @Resource |
| | | private MdmUnitMeasureApi mdmUnitMeasureApi; |
| | | @Resource |
| | |
| | | // 1. è·å¾å
³èæ°æ® |
| | | Map<Long, MdmItemRespDTO> itemMap = mdmItemApi.getItemMap( |
| | | convertSet(list, MesWmOutsourceIssueLineDO::getItemId)); |
| | | Map<Long, MdmUnitMeasureRespDTO> unitMeasureMap = mdmUnitMeasureApi.getUnitMeasureList( |
| | | convertSet(itemMap.values(), MdmItemRespDTO::getUnitMeasureId)).getCheckedData() |
| | | .stream().collect(Collectors.toMap(MdmUnitMeasureRespDTO::getId, e -> e)); |
| | | Set<Long> unitMeasureIds = new HashSet<>(convertSet(itemMap.values(), MdmItemRespDTO::getUnitMeasureId)); |
| | | unitMeasureIds.addAll(convertSet(list, MesWmOutsourceIssueLineDO::getEnterUnitMeasureId)); |
| | | Map<Long, MdmUnitMeasureRespDTO> unitMeasureMap = mdmUnitMeasureApi.getUnitMeasureList(unitMeasureIds) |
| | | .getCheckedData().stream().collect(Collectors.toMap(MdmUnitMeasureRespDTO::getId, e -> e)); |
| | | Map<Long, MdmItemModelRespDTO> itemModelMap = mdmItemModelApi.getItemModelMap( |
| | | convertSet(list, MesWmOutsourceIssueLineDO::getItemModelId)); |
| | | // 1.2 è·å¾æ¹æ¬¡æ°æ® |
| | | Set<Long> batchIds = convertSet(list, MesWmOutsourceIssueLineDO::getBatchId); |
| | | batchIds.remove(null); |
| | |
| | | // 2. æå»ºç»æ |
| | | return BeanUtils.toBean(list, MesWmOutsourceIssueLineRespVO.class, vo -> { |
| | | MapUtils.findAndThen(itemMap, vo.getItemId(), item -> { |
| | | vo.setItemCode(item.getCode()).setItemName(item.getName()).setSpecification(item.getSpecification()); |
| | | vo.setItemCode(item.getCode()).setItemName(item.getName()).setSpecification(item.getSpecification()) |
| | | .setUnitMeasureId(item.getUnitMeasureId()); |
| | | MapUtils.findAndThen(unitMeasureMap, item.getUnitMeasureId(), |
| | | unitMeasure -> vo.setUnitMeasureName(unitMeasure.getName())); |
| | | }); |
| | | MapUtils.findAndThen(unitMeasureMap, vo.getEnterUnitMeasureId(), |
| | | unitMeasure -> vo.setEnterUnitMeasureName(unitMeasure.getName())); |
| | | MapUtils.findAndThen(itemModelMap, vo.getItemModelId(), |
| | | itemModel -> vo.setItemModel(itemModel.getModel())); |
| | | MapUtils.findAndThen(batchMap, vo.getBatchId(), batch -> vo.setBatchCode(batch.getCode())); |
| | | }); |
| | | } |
| | |
| | | @Schema(description = "è§æ ¼åå·", example = "10mm*100mm") |
| | | private String specification; |
| | | |
| | | @Schema(description = "计éåä½åç§°", example = "åå
") |
| | | @Schema(description = "主计éåä½ç¼å·ï¼ç©æä¸»åä½ï¼", example = "1") |
| | | private Long unitMeasureId; |
| | | |
| | | @Schema(description = "主计éåä½åç§°ï¼ç©æä¸»åä½ï¼", example = "åå
") |
| | | private String unitMeasureName; |
| | | |
| | | @Schema(description = "åææ°é", requiredMode = Schema.RequiredMode.REQUIRED, example = "500.00") |
| | | @Schema(description = "ç©æåå·ç¼å·", example = "1") |
| | | private Long itemModelId; |
| | | |
| | | @Schema(description = "ç©æåå·åç§°", example = "4ç±³/æ ¹") |
| | | private String itemModel; |
| | | |
| | | @Schema(description = "å½å
¥åä½ç¼å·", example = "7") |
| | | private Long enterUnitMeasureId; |
| | | |
| | | @Schema(description = "å½å
¥åä½åç§°", example = "æ ¹") |
| | | private String enterUnitMeasureName; |
| | | |
| | | @Schema(description = "å½å
¥æ°éï¼æå½å
¥åä½è®¡ï¼", example = "10.00") |
| | | private BigDecimal enterQuantity; |
| | | |
| | | @Schema(description = "åææ°éï¼ç©æä¸»åä½å£å¾ï¼", requiredMode = Schema.RequiredMode.REQUIRED, example = "500.00") |
| | | private BigDecimal quantity; |
| | | |
| | | @Schema(description = "åºåID", example = "1") |
| | |
| | | @NotNull(message = "ç©æIDä¸è½ä¸ºç©º") |
| | | private Long itemId; |
| | | |
| | | @Schema(description = "åææ°é", requiredMode = Schema.RequiredMode.REQUIRED, example = "500.00") |
| | | @NotNull(message = "åææ°éä¸è½ä¸ºç©º") |
| | | @Schema(description = "ç©æåå·ç¼å·ï¼éæ©åå·åæå
¶åä½ä¸æ¢ç®æ¯çæ¢ç®ä¸ºä¸»å使°éï¼", example = "1") |
| | | private Long itemModelId; |
| | | |
| | | @Schema(description = "å½å
¥åä½ç¼å·ï¼ä¸ä¼ æä¼ ç©æä¸»å使¶æä¸»åä½å½å
¥ï¼", example = "7") |
| | | private Long enterUnitMeasureId; |
| | | |
| | | @Schema(description = "å½å
¥æ°éï¼æå½å
¥åä½è®¡ï¼ç³»ç»æ®æ¤æ¢ç®åºåææ°éï¼", example = "10.00") |
| | | @DecimalMin(value = "0", inclusive = false, message = "å½å
¥æ°éå¿
é¡»å¤§äº 0") |
| | | private BigDecimal enterQuantity; |
| | | |
| | | @Schema(description = "åææ°éï¼ç©æä¸»åä½å£å¾ï¼ä¼ äºå½å
¥æ°éæ¶ç±ç³»ç»æ¢ç®ï¼æ éå¡«åï¼", example = "500.00") |
| | | @DecimalMin(value = "0.01", message = "åææ°éå¿
é¡»å¤§äº 0") |
| | | private BigDecimal quantity; |
| | | |
| | |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.productissue.vo.line.MesWmProductIssueLineRespVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.productissue.vo.line.MesWmProductIssueLineReturnableRespVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.productissue.vo.line.MesWmProductIssueLineSaveReqVO; |
| | | import cn.iocoder.yudao.module.mdm.api.item.MdmItemModelApi; |
| | | import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemModelRespDTO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.md.unitmeasure.MesMdUnitMeasureDO; |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.pro.task.MesProTaskDO; |
| | |
| | | import java.math.BigDecimal; |
| | | import java.util.ArrayList; |
| | | import java.util.Collections; |
| | | import java.util.HashSet; |
| | | import java.util.LinkedHashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| | | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; |
| | |
| | | private MesMdUnitMeasureService unitMeasureService; |
| | | @Resource |
| | | private MesProTaskService taskService; |
| | | @Resource |
| | | private MdmItemModelApi mdmItemModelApi; |
| | | |
| | | @PostMapping("/create") |
| | | @Operation(summary = "åå»ºé¢æåºåºåè¡") |
| | |
| | | // 1. è·å¾å
³èæ°æ® |
| | | Map<Long, MesMdItemDO> itemMap = mdmItemService.getItemMap( |
| | | convertSet(list, MesWmProductIssueLineDO::getItemId)); |
| | | Map<Long, MesMdUnitMeasureDO> unitMeasureMap = unitMeasureService.getUnitMeasureMap( |
| | | convertSet(itemMap.values(), MesMdItemDO::getUnitMeasureId)); |
| | | // ç©æä¸»åä½ä¸å½å
¥åä½é½è¦è§£æåç§° |
| | | Set<Long> unitMeasureIds = new HashSet<>(convertSet(itemMap.values(), MesMdItemDO::getUnitMeasureId)); |
| | | unitMeasureIds.addAll(convertSet(list, MesWmProductIssueLineDO::getEnterUnitMeasureId)); |
| | | Map<Long, MesMdUnitMeasureDO> unitMeasureMap = unitMeasureService.getUnitMeasureMap(unitMeasureIds); |
| | | Map<Long, MdmItemModelRespDTO> itemModelMap = mdmItemModelApi.getItemModelMap( |
| | | convertSet(list, MesWmProductIssueLineDO::getItemModelId)); |
| | | Map<Long, MesProTaskDO> taskMap = taskService.getTaskMap( |
| | | convertSet(list, MesWmProductIssueLineDO::getTaskId)); |
| | | // 2. æå»ºç»æ |
| | | return BeanUtils.toBean(list, MesWmProductIssueLineRespVO.class, vo -> { |
| | | MapUtils.findAndThen(itemMap, vo.getItemId(), item -> { |
| | | vo.setItemCode(item.getCode()).setItemName(item.getName()).setSpecification(item.getSpecification()).setMdmItemId(item.getMdmItemId()); |
| | | vo.setUnitMeasureId(item.getUnitMeasureId()); |
| | | MapUtils.findAndThen(unitMeasureMap, item.getUnitMeasureId(), |
| | | unit -> vo.setUnitMeasureName(unit.getName())); |
| | | }); |
| | | MapUtils.findAndThen(unitMeasureMap, vo.getEnterUnitMeasureId(), |
| | | unit -> vo.setEnterUnitMeasureName(unit.getName())); |
| | | MapUtils.findAndThen(itemModelMap, vo.getItemModelId(), |
| | | itemModel -> vo.setItemModel(itemModel.getModel())); |
| | | MapUtils.findAndThen(taskMap, vo.getTaskId(), task -> |
| | | vo.setTaskCode(task.getCode()).setTaskName(task.getName())); |
| | | }); |
| | |
| | | @Schema(description = "è§æ ¼åå·", example = "10mm*100mm") |
| | | private String specification; |
| | | |
| | | @Schema(description = "计éåä½åç§°", example = "åå
") |
| | | @Schema(description = "主计éåä½ç¼å·ï¼ç©æä¸»åä½ï¼", example = "1") |
| | | private Long unitMeasureId; |
| | | |
| | | @Schema(description = "主计éåä½åç§°", example = "åå
") |
| | | private String unitMeasureName; |
| | | |
| | | @Schema(description = "颿æ°é", example = "100.00") |
| | | @Schema(description = "ç©æåå·ç¼å·", example = "1") |
| | | private Long itemModelId; |
| | | |
| | | @Schema(description = "ç©æåå·åç§°", example = "4ç±³/æ ¹") |
| | | private String itemModel; |
| | | |
| | | @Schema(description = "å½å
¥åä½ç¼å·", example = "7") |
| | | private Long enterUnitMeasureId; |
| | | |
| | | @Schema(description = "å½å
¥åä½åç§°", example = "æ ¹") |
| | | private String enterUnitMeasureName; |
| | | |
| | | @Schema(description = "å½å
¥æ°éï¼æå½å
¥åä½è®¡ï¼", example = "10.00") |
| | | private BigDecimal enterQuantity; |
| | | |
| | | @Schema(description = "颿æ°éï¼ç©æä¸»åä½å£å¾ï¼", example = "100.00") |
| | | private BigDecimal quantity; |
| | | |
| | | @Schema(description = "æ¹æ¬¡ID", example = "1") |
| | |
| | | @NotNull(message = "ç©æIDä¸è½ä¸ºç©º") |
| | | private Long itemId; |
| | | |
| | | @Schema(description = "颿æ°é", requiredMode = Schema.RequiredMode.REQUIRED, example = "100.00") |
| | | @NotNull(message = "颿æ°éä¸è½ä¸ºç©º") |
| | | @DecimalMin(value = "0", inclusive = false, message = "颿æ°éå¿
é¡»å¤§äº 0") |
| | | @Schema(description = "ç©æåå·ç¼å·ï¼éæ©åå·åæå
¶åä½ä¸æ¢ç®æ¯çæ¢ç®ä¸ºä¸»å使°éï¼", example = "1") |
| | | private Long itemModelId; |
| | | |
| | | @Schema(description = "å½å
¥åä½ç¼å·ï¼ä¸ä¼ æä¼ ç©æä¸»å使¶æä¸»åä½å½å
¥ï¼", example = "7") |
| | | private Long enterUnitMeasureId; |
| | | |
| | | @Schema(description = "å½å
¥æ°éï¼æå½å
¥åä½è®¡ï¼ç³»ç»æ®æ¤æ¢ç®åºé¢ææ°éï¼", example = "10.00") |
| | | @DecimalMin(value = "0", inclusive = false, message = "å½å
¥æ°éå¿
é¡»å¤§äº 0") |
| | | private BigDecimal enterQuantity; |
| | | |
| | | @Schema(description = "颿æ°éï¼ç©æä¸»åä½å£å¾ï¼ä¼ äºå½å
¥æ°éæ¶ç±ç³»ç»æ¢ç®ï¼æ éå¡«åï¼", example = "100.00") |
| | | @DecimalMin(value = "0.01", message = "颿æ°éå¿
é¡»å¤§äº 0") |
| | | private BigDecimal quantity; |
| | | |
| | | @Schema(description = "æ¹æ¬¡ID", example = "1") |
| | |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.productsales.vo.line.MesWmProductSalesLineRespVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.productsales.vo.line.MesWmProductSalesLineSaveReqVO; |
| | | import cn.iocoder.yudao.module.mdm.api.item.MdmItemApi; |
| | | import cn.iocoder.yudao.module.mdm.api.item.MdmItemModelApi; |
| | | import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemModelRespDTO; |
| | | import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemRespDTO; |
| | | |
| | | |
| | |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import java.util.Collections; |
| | | import java.util.HashSet; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | import java.util.stream.Collectors; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| | |
| | | private MesWmProductSalesLineService productSalesLineService; |
| | | @Resource |
| | | private MdmItemApi mdmItemApi; |
| | | @Resource |
| | | private MdmItemModelApi mdmItemModelApi; |
| | | @Resource |
| | | private MdmUnitMeasureApi mdmUnitMeasureApi; |
| | | |
| | |
| | | // 1. è·å¾å
³èæ°æ® |
| | | Map<Long, MdmItemRespDTO> itemMap = mdmItemApi.getItemMap( |
| | | convertSet(list, MesWmProductSalesLineDO::getItemId)); |
| | | Map<Long, MdmUnitMeasureRespDTO> unitMeasureMap = mdmUnitMeasureApi.getUnitMeasureList( |
| | | convertSet(itemMap.values(), MdmItemRespDTO::getUnitMeasureId)).getCheckedData() |
| | | .stream().collect(Collectors.toMap(MdmUnitMeasureRespDTO::getId, e -> e)); |
| | | // ç©æä¸»åä½ä¸å½å
¥åä½é½è¦è§£æåç§° |
| | | Set<Long> unitMeasureIds = new HashSet<>(convertSet(itemMap.values(), MdmItemRespDTO::getUnitMeasureId)); |
| | | unitMeasureIds.addAll(convertSet(list, MesWmProductSalesLineDO::getEnterUnitMeasureId)); |
| | | Map<Long, MdmUnitMeasureRespDTO> unitMeasureMap = mdmUnitMeasureApi.getUnitMeasureList(unitMeasureIds) |
| | | .getCheckedData().stream().collect(Collectors.toMap(MdmUnitMeasureRespDTO::getId, e -> e)); |
| | | Map<Long, MdmItemModelRespDTO> itemModelMap = mdmItemModelApi.getItemModelMap( |
| | | convertSet(list, MesWmProductSalesLineDO::getItemModelId)); |
| | | // 2. æå»ºç»æ |
| | | return BeanUtils.toBean(list, MesWmProductSalesLineRespVO.class, vo -> { |
| | | MapUtils.findAndThen(itemMap, vo.getItemId(), item -> { |
| | | vo.setItemCode(item.getCode()).setItemName(item.getName()).setSpecification(item.getSpecification()); |
| | | vo.setUnitMeasureId(item.getUnitMeasureId()); |
| | | MapUtils.findAndThen(unitMeasureMap, item.getUnitMeasureId(), |
| | | unitMeasure -> vo.setUnitMeasureName(unitMeasure.getName())); |
| | | }); |
| | | |
| | | MapUtils.findAndThen(unitMeasureMap, vo.getEnterUnitMeasureId(), |
| | | unitMeasure -> vo.setEnterUnitMeasureName(unitMeasure.getName())); |
| | | MapUtils.findAndThen(itemModelMap, vo.getItemModelId(), |
| | | itemModel -> vo.setItemModel(itemModel.getModel())); |
| | | }); |
| | | } |
| | | |
| | |
| | | @Schema(description = "è§æ ¼åå·", example = "100g") |
| | | private String specification; |
| | | |
| | | @Schema(description = "åä½åç§°", example = "个") |
| | | @Schema(description = "主计éåä½ç¼å·ï¼ç©æä¸»åä½ï¼", example = "1") |
| | | private Long unitMeasureId; |
| | | |
| | | @Schema(description = "主计éåä½åç§°", example = "个") |
| | | private String unitMeasureName; |
| | | |
| | | @Schema(description = "åºåºæ°é", example = "100") |
| | | @Schema(description = "ç©æåå·ç¼å·", example = "1") |
| | | private Long itemModelId; |
| | | |
| | | @Schema(description = "ç©æåå·åç§°", example = "4ç±³/æ ¹") |
| | | private String itemModel; |
| | | |
| | | @Schema(description = "å½å
¥åä½ç¼å·", example = "7") |
| | | private Long enterUnitMeasureId; |
| | | |
| | | @Schema(description = "å½å
¥åä½åç§°", example = "æ ¹") |
| | | private String enterUnitMeasureName; |
| | | |
| | | @Schema(description = "å½å
¥æ°éï¼æå½å
¥åä½è®¡ï¼", example = "10.00") |
| | | private BigDecimal enterQuantity; |
| | | |
| | | @Schema(description = "åºåºæ°éï¼ç©æä¸»åä½å£å¾ï¼", example = "100") |
| | | private BigDecimal quantity; |
| | | |
| | | @Schema(description = "æ¹æ¬¡ID", example = "1") |
| | |
| | | package cn.iocoder.yudao.module.mes.controller.admin.wm.productsales.vo.line; |
| | | |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import jakarta.validation.constraints.DecimalMin; |
| | | import jakarta.validation.constraints.NotNull; |
| | | import lombok.Data; |
| | | |
| | |
| | | @NotNull(message = "ç©æä¸è½ä¸ºç©º") |
| | | private Long itemId; |
| | | |
| | | @Schema(description = "åºåºæ°é", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") |
| | | @NotNull(message = "åºåºæ°éä¸è½ä¸ºç©º") |
| | | @Schema(description = "ç©æåå·ç¼å·ï¼éæ©åå·åæå
¶åä½ä¸æ¢ç®æ¯çæ¢ç®ä¸ºä¸»å使°éï¼", example = "1") |
| | | private Long itemModelId; |
| | | |
| | | @Schema(description = "å½å
¥åä½ç¼å·ï¼ä¸ä¼ æä¼ ç©æä¸»å使¶æä¸»åä½å½å
¥ï¼", example = "7") |
| | | private Long enterUnitMeasureId; |
| | | |
| | | @Schema(description = "å½å
¥æ°éï¼æå½å
¥åä½è®¡ï¼ç³»ç»æ®æ¤æ¢ç®åºåºæ°éï¼", example = "10.00") |
| | | @DecimalMin(value = "0", inclusive = false, message = "å½å
¥æ°éå¿
é¡»å¤§äº 0") |
| | | private BigDecimal enterQuantity; |
| | | |
| | | @Schema(description = "åºåºæ°éï¼ç©æä¸»åä½å£å¾ï¼ä¼ äºå½å
¥æ°éæ¶ç±ç³»ç»æ¢ç®ï¼æ éå¡«åï¼", example = "100") |
| | | @DecimalMin(value = "0.01", message = "åºåºæ°éå¿
é¡»å¤§äº 0") |
| | | private BigDecimal quantity; |
| | | |
| | | @Schema(description = "æ¹æ¬¡ID", example = "1") |
| | |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.returnvendor.vo.line.MesWmReturnVendorLineRespVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.wm.returnvendor.vo.line.MesWmReturnVendorLineSaveReqVO; |
| | | import cn.iocoder.yudao.module.mdm.api.item.MdmItemApi; |
| | | import cn.iocoder.yudao.module.mdm.api.item.MdmItemModelApi; |
| | | import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemModelRespDTO; |
| | | import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemRespDTO; |
| | | |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnvendor.MesWmReturnVendorLineDO; |
| | |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import java.util.Collections; |
| | | import java.util.HashSet; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | import java.util.stream.Collectors; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| | |
| | | private MesWmReturnVendorLineService returnVendorLineService; |
| | | @Resource |
| | | private MdmItemApi mdmItemApi; |
| | | @Resource |
| | | private MdmItemModelApi mdmItemModelApi; |
| | | @Resource |
| | | private MdmUnitMeasureApi mdmUnitMeasureApi; |
| | | |
| | |
| | | // 1. è·å¾å
³èæ°æ® |
| | | Map<Long, MdmItemRespDTO> itemMap = mdmItemApi.getItemMap( |
| | | convertSet(list, MesWmReturnVendorLineDO::getItemId)); |
| | | Map<Long, MdmUnitMeasureRespDTO> unitMeasureMap = mdmUnitMeasureApi.getUnitMeasureList( |
| | | convertSet(itemMap.values(), MdmItemRespDTO::getUnitMeasureId)).getCheckedData() |
| | | .stream().collect(Collectors.toMap(MdmUnitMeasureRespDTO::getId, e -> e)); |
| | | // ç©æä¸»åä½ä¸å½å
¥åä½é½è¦è§£æåç§° |
| | | Set<Long> unitMeasureIds = new HashSet<>(convertSet(itemMap.values(), MdmItemRespDTO::getUnitMeasureId)); |
| | | unitMeasureIds.addAll(convertSet(list, MesWmReturnVendorLineDO::getEnterUnitMeasureId)); |
| | | Map<Long, MdmUnitMeasureRespDTO> unitMeasureMap = mdmUnitMeasureApi.getUnitMeasureList(unitMeasureIds) |
| | | .getCheckedData().stream().collect(Collectors.toMap(MdmUnitMeasureRespDTO::getId, e -> e)); |
| | | Map<Long, MdmItemModelRespDTO> itemModelMap = mdmItemModelApi.getItemModelMap( |
| | | convertSet(list, MesWmReturnVendorLineDO::getItemModelId)); |
| | | // 2. æå»ºç»æ |
| | | return BeanUtils.toBean(list, MesWmReturnVendorLineRespVO.class, vo -> { |
| | | MapUtils.findAndThen(itemMap, vo.getItemId(), item -> { |
| | | vo.setItemCode(item.getCode()); |
| | | vo.setItemName(item.getName()); |
| | | vo.setSpecification(item.getSpecification()); |
| | | vo.setUnitMeasureId(item.getUnitMeasureId()); |
| | | MapUtils.findAndThen(unitMeasureMap, item.getUnitMeasureId(), |
| | | unitMeasure -> vo.setUnitMeasureName(unitMeasure.getName())); |
| | | }); |
| | | MapUtils.findAndThen(unitMeasureMap, vo.getEnterUnitMeasureId(), |
| | | unitMeasure -> vo.setEnterUnitMeasureName(unitMeasure.getName())); |
| | | MapUtils.findAndThen(itemModelMap, vo.getItemModelId(), |
| | | itemModel -> vo.setItemModel(itemModel.getModel())); |
| | | }); |
| | | } |
| | | |
| | |
| | | @Schema(description = "è§æ ¼åå·", example = "10mm*100mm") |
| | | private String specification; |
| | | |
| | | @Schema(description = "计éåä½åç§°", example = "åå
") |
| | | @Schema(description = "主计éåä½ç¼å·ï¼ç©æä¸»åä½ï¼", example = "1") |
| | | private Long unitMeasureId; |
| | | |
| | | @Schema(description = "主计éåä½åç§°", example = "åå
") |
| | | private String unitMeasureName; |
| | | |
| | | @Schema(description = "éè´§æ°é", example = "100.00") |
| | | @Schema(description = "ç©æåå·ç¼å·", example = "1") |
| | | private Long itemModelId; |
| | | |
| | | @Schema(description = "ç©æåå·åç§°", example = "4ç±³/æ ¹") |
| | | private String itemModel; |
| | | |
| | | @Schema(description = "å½å
¥åä½ç¼å·", example = "7") |
| | | private Long enterUnitMeasureId; |
| | | |
| | | @Schema(description = "å½å
¥åä½åç§°", example = "æ ¹") |
| | | private String enterUnitMeasureName; |
| | | |
| | | @Schema(description = "å½å
¥æ°éï¼æå½å
¥åä½è®¡ï¼", example = "10.00") |
| | | private BigDecimal enterQuantity; |
| | | |
| | | @Schema(description = "éè´§æ°éï¼ç©æä¸»åä½å£å¾ï¼", example = "100.00") |
| | | private BigDecimal quantity; |
| | | |
| | | @Schema(description = "æ¹æ¬¡ID", example = "1") |
| | |
| | | @NotNull(message = "ç©æIDä¸è½ä¸ºç©º") |
| | | private Long itemId; |
| | | |
| | | @Schema(description = "éè´§æ°é", requiredMode = Schema.RequiredMode.REQUIRED, example = "100.00") |
| | | @NotNull(message = "éè´§æ°éä¸è½ä¸ºç©º") |
| | | @DecimalMin(value = "0", inclusive = false, message = "éè´§æ°éå¿
é¡»å¤§äº 0") |
| | | @Schema(description = "ç©æåå·ç¼å·ï¼éæ©åå·åæå
¶åä½ä¸æ¢ç®æ¯çæ¢ç®ä¸ºä¸»å使°éï¼", example = "1") |
| | | private Long itemModelId; |
| | | |
| | | @Schema(description = "å½å
¥åä½ç¼å·ï¼ä¸ä¼ æä¼ ç©æä¸»å使¶æä¸»åä½å½å
¥ï¼", example = "7") |
| | | private Long enterUnitMeasureId; |
| | | |
| | | @Schema(description = "å½å
¥æ°éï¼æå½å
¥åä½è®¡ï¼ç³»ç»æ®æ¤æ¢ç®åºåºæ°éï¼", example = "10.00") |
| | | @DecimalMin(value = "0", inclusive = false, message = "å½å
¥æ°éå¿
é¡»å¤§äº 0") |
| | | private BigDecimal enterQuantity; |
| | | |
| | | @Schema(description = "éè´§æ°éï¼ç©æä¸»åä½å£å¾ï¼ä¼ äºå½å
¥æ°éæ¶ç±ç³»ç»æ¢ç®ï¼æ éå¡«åï¼", example = "100.00") |
| | | @DecimalMin(value = "0.01", message = "éè´§æ°éå¿
é¡»å¤§äº 0") |
| | | private BigDecimal quantity; |
| | | |
| | | @Schema(description = "æ¹æ¬¡ID", example = "1") |
| | |
| | | */ |
| | | private Long itemId; |
| | | /** |
| | | * å
¥åºæ°é |
| | | * ç©æåå·ç¼å· |
| | | * |
| | | * å
³è {@link cn.iocoder.yudao.module.mdm.dal.dataobject.item.MdmItemModelDO#getId()} |
| | | */ |
| | | private Long itemModelId; |
| | | /** |
| | | * ç©æåå·åç§° |
| | | */ |
| | | private String itemModel; |
| | | /** |
| | | * å½å
¥åä½ç¼å· |
| | | * |
| | | * å
³è {@link cn.iocoder.yudao.module.mdm.dal.dataobject.unit.MdmUnitMeasureDO#getId()} |
| | | * 为空æçäºç©æä¸»å使¶ï¼è¯´ææ¬æ¬¡æä¸»åä½å½å
¥ |
| | | */ |
| | | private Long enterUnitMeasureId; |
| | | /** |
| | | * å½å
¥æ°éï¼æå½å
¥åä½è®¡ï¼ |
| | | * |
| | | * æä¸»åä½å½å
¥æ¶ä¸ {@link #receivedQuantity} ç¸å |
| | | */ |
| | | private BigDecimal enterQuantity; |
| | | /** |
| | | * å
¥åºæ°éï¼ç©æä¸»åä½å£å¾ï¼åºå䏿µæ°´å以该æ°é为åï¼ |
| | | */ |
| | | private BigDecimal receivedQuantity; |
| | | /** |
| | |
| | | */ |
| | | private Long itemId; |
| | | /** |
| | | * åºåºæ°é |
| | | * ç©æåå·ç¼å· |
| | | * |
| | | * å
³è {@link cn.iocoder.yudao.module.mdm.dal.dataobject.item.MdmItemModelDO#getId()} |
| | | */ |
| | | private Long itemModelId; |
| | | /** |
| | | * å½å
¥åä½ç¼å· |
| | | * |
| | | * å
³è {@link cn.iocoder.yudao.module.mdm.dal.dataobject.unit.MdmUnitMeasureDO#getId()} |
| | | * 为空æçäºç©æä¸»å使¶ï¼è¯´ææ¬æ¬¡æä¸»åä½å½å
¥ |
| | | */ |
| | | private Long enterUnitMeasureId; |
| | | /** |
| | | * å½å
¥æ°éï¼æå½å
¥åä½è®¡ï¼ |
| | | * |
| | | * æä¸»åä½å½å
¥æ¶ä¸ {@link #quantity} ç¸å |
| | | */ |
| | | private BigDecimal enterQuantity; |
| | | /** |
| | | * åºåºæ°éï¼ç©æä¸»åä½å£å¾ï¼åºå䏿µæ°´å以该æ°é为åï¼ |
| | | */ |
| | | private BigDecimal quantity; |
| | | /** |
| | |
| | | */ |
| | | private Long itemId; |
| | | /** |
| | | * åææ°é |
| | | * ç©æåå·ç¼å· |
| | | * |
| | | * å
³è {@link cn.iocoder.yudao.module.mdm.dal.dataobject.item.MdmItemModelDO#getId()} |
| | | */ |
| | | private Long itemModelId; |
| | | /** |
| | | * å½å
¥åä½ç¼å· |
| | | * |
| | | * å
³è {@link cn.iocoder.yudao.module.mdm.dal.dataobject.unit.MdmUnitMeasureDO#getId()} |
| | | * 为空æçäºç©æä¸»å使¶ï¼è¯´ææ¬æ¬¡æä¸»åä½å½å
¥ |
| | | */ |
| | | private Long enterUnitMeasureId; |
| | | /** |
| | | * å½å
¥æ°éï¼æå½å
¥åä½è®¡ï¼ |
| | | * |
| | | * æä¸»åä½å½å
¥æ¶ä¸ {@link #quantity} ç¸å |
| | | */ |
| | | private BigDecimal enterQuantity; |
| | | /** |
| | | * åææ°éï¼ç©æä¸»åä½å£å¾ï¼åºå䏿µæ°´å以该æ°é为åï¼ |
| | | */ |
| | | private BigDecimal quantity; |
| | | /** |
| | |
| | | */ |
| | | private Long itemId; |
| | | /** |
| | | * 颿æ°é |
| | | * ç©æåå·ç¼å· |
| | | * |
| | | * å
³è {@link cn.iocoder.yudao.module.mdm.dal.dataobject.item.MdmItemModelDO#getId()} |
| | | */ |
| | | private Long itemModelId; |
| | | /** |
| | | * å½å
¥åä½ç¼å· |
| | | * |
| | | * å
³è {@link cn.iocoder.yudao.module.mdm.dal.dataobject.unit.MdmUnitMeasureDO#getId()} |
| | | * 为空æçäºç©æä¸»å使¶ï¼è¯´ææ¬æ¬¡æä¸»åä½å½å
¥ |
| | | */ |
| | | private Long enterUnitMeasureId; |
| | | /** |
| | | * å½å
¥æ°éï¼æå½å
¥åä½è®¡ï¼ |
| | | * |
| | | * æä¸»åä½å½å
¥æ¶ä¸ {@link #quantity} ç¸å |
| | | */ |
| | | private BigDecimal enterQuantity; |
| | | /** |
| | | * 颿æ°éï¼ç©æä¸»åä½å£å¾ï¼åºå䏿µæ°´å以该æ°é为åï¼ |
| | | */ |
| | | private BigDecimal quantity; |
| | | /** |
| | |
| | | */ |
| | | private Long itemId; |
| | | /** |
| | | * åºåºæ°é |
| | | * ç©æåå·ç¼å· |
| | | * |
| | | * å
³è {@link cn.iocoder.yudao.module.mdm.dal.dataobject.item.MdmItemModelDO#getId()} |
| | | */ |
| | | private Long itemModelId; |
| | | /** |
| | | * å½å
¥åä½ç¼å· |
| | | * |
| | | * å
³è {@link cn.iocoder.yudao.module.mdm.dal.dataobject.unit.MdmUnitMeasureDO#getId()} |
| | | * 为空æçäºç©æä¸»å使¶ï¼è¯´ææ¬æ¬¡æä¸»åä½å½å
¥ |
| | | */ |
| | | private Long enterUnitMeasureId; |
| | | /** |
| | | * å½å
¥æ°éï¼æå½å
¥åä½è®¡ï¼ |
| | | * |
| | | * æä¸»åä½å½å
¥æ¶ä¸ {@link #quantity} ç¸å |
| | | */ |
| | | private BigDecimal enterQuantity; |
| | | /** |
| | | * åºåºæ°éï¼ç©æä¸»åä½å£å¾ï¼åºå䏿µæ°´å以该æ°é为åï¼ |
| | | */ |
| | | private BigDecimal quantity; |
| | | /** |
| | |
| | | */ |
| | | private Long itemId; |
| | | /** |
| | | * éè´§æ°é |
| | | * ç©æåå·ç¼å· |
| | | * |
| | | * å
³è {@link cn.iocoder.yudao.module.mdm.dal.dataobject.item.MdmItemModelDO#getId()} |
| | | */ |
| | | private Long itemModelId; |
| | | /** |
| | | * å½å
¥åä½ç¼å· |
| | | * |
| | | * å
³è {@link cn.iocoder.yudao.module.mdm.dal.dataobject.unit.MdmUnitMeasureDO#getId()} |
| | | * 为空æçäºç©æä¸»å使¶ï¼è¯´ææ¬æ¬¡æä¸»åä½å½å
¥ |
| | | */ |
| | | private Long enterUnitMeasureId; |
| | | /** |
| | | * å½å
¥æ°éï¼æå½å
¥åä½è®¡ï¼ |
| | | * |
| | | * æä¸»åä½å½å
¥æ¶ä¸ {@link #quantity} ç¸å |
| | | */ |
| | | private BigDecimal enterQuantity; |
| | | /** |
| | | * éè´§æ°éï¼ç©æä¸»åä½å£å¾ï¼åºå䏿µæ°´å以该æ°é为åï¼ |
| | | */ |
| | | private BigDecimal quantity; |
| | | /** |
| | |
| | | ErrorCode QC_IQC_CHECK_RESULT_EMPTY = new ErrorCode(1_040_603_007, "宿æ£éªååï¼æ£æµç»æå¿
须填å"); |
| | | ErrorCode QC_IQC_TEMPLATE_IS_DISABLE = new ErrorCode(1_040_603_009, "æéè´¨æ£æ¹æ¡ã{}ãå·²ç¦ç¨ï¼è¯·éæ°éæ©å·²å¯ç¨çè´¨æ£æ¹æ¡"); |
| | | ErrorCode QC_IQC_TEMPLATE_TYPE_NOT_MATCH = new ErrorCode(1_040_603_010, "æéè´¨æ£æ¹æ¡ã{}ãçæ£æµç§ç±»ä¸å
嫿¥ææ£éªï¼è¯·éæ°éæ©æ£æµç§ç±»å
嫿¥ææ£éªçè´¨æ£æ¹æ¡"); |
| | | ErrorCode QC_IQC_NO_ENABLED_TEMPLATE = new ErrorCode(1_040_603_011, "ç³»ç»ä¸æ²¡æå¯ç¨çæ¥ææ£éªï¼IQCï¼è´¨æ£æ¹æ¡ï¼æ æ³èªå¨çææ£éªåï¼è¯·å
å¨ãè´¨é管ç-è´¨æ£æ¹æ¡ã䏿°å»ºæå¯ç¨ä¸ä¸ªæ£æµç§ç±»å
嫿¥ææ£éªçæ¹æ¡"); |
| | | // ========== MES è´¨é管ç-æ¥ææ£éªè¡ï¼1-040-603-100ï¼ ========== |
| | | ErrorCode QC_IQC_LINE_NOT_EXISTS = new ErrorCode(1_040_603_100, "æ¥ææ£éªè¡ä¸åå¨"); |
| | | |
| | |
| | | ErrorCode WM_MATERIAL_STOCK_IMPORT_OPERATION_INVALID = new ErrorCode(1_040_703_027, "æä½ç±»å({})䏿¯æ"); |
| | | ErrorCode WM_MATERIAL_STOCK_IMPORT_STOCK_NOT_EXISTS = new ErrorCode(1_040_703_028, "åºåè®°å½ä¸åå¨ï¼æ æ³æ§è¡è¯¥æä½"); |
| | | |
| | | // ---- 主è¾
å使¢ç®ï¼ç»åç©æåå·ï¼ ---- |
| | | ErrorCode WM_ITEM_UNIT_CONVERT_NOT_CONFIGURED = new ErrorCode(1_040_703_029, |
| | | "ç©æã{}-{}ãæ²¡æé
置计éåä½ã{}ãå°ä¸»åä½ã{}ãçæ¢ç®æ¯çï¼æ æ³æ¢ç®ï¼è¯·å
å°ãåºç¡æ°æ®-ç©æä¸»æ°æ®-åå·ãä¸ºè¯¥ç©ææ°å¢åå·å¹¶å¡«åæ¢ç®æ¯ç"); |
| | | ErrorCode WM_ITEM_UNIT_CONVERT_MODEL_UNIT_MISMATCH = new ErrorCode(1_040_703_030, |
| | | "æéåå·ã{}ãç计éå使¯ã{}ãï¼ä¸æ¬æ¬¡å½å
¥åä½ã{}ãä¸ä¸è´ï¼è¯·éæ°éæ©åå·ææ¹ååå·å¯¹åºç计éåä½"); |
| | | ErrorCode WM_ITEM_UNIT_CONVERT_QUANTITY_REQUIRED = new ErrorCode(1_040_703_031, |
| | | "计éåä½ã{}ã䏿¯ç©æã{}-{}ãç主åä½ï¼æè¯¥åä½å½å
¥æ¶å½å
¥æ°éä¸è½ä¸ºç©ºï¼è¯·å¡«åå½å
¥æ°éææ¹ç¨ä¸»åä½ã{}ã"); |
| | | ErrorCode WM_ITEM_UNIT_CONVERT_MODEL_REQUIRED = new ErrorCode(1_040_703_032, |
| | | "计éåä½ã{}ãçæ¢ç®æ¯çç±åå·å³å®ï¼è¯·å
éæ©ç©æã{}-{}ãçåå·ååå½å
¥æ°é"); |
| | | ErrorCode WM_ITEM_UNIT_CONVERT_RATE_INVALID = new ErrorCode(1_040_703_033, |
| | | "åå·ã{}ãçæ¢ç®æ¯ç为ã{}ãä¸åçï¼1 个åå·åä½å¿
须对åºå¤§äº 0 ç主å使°éï¼è¯·å°ãåºç¡æ°æ®-ç©æä¸»æ°æ®-åå·ãä¿®æ£è¯¥åå·çæ¢ç®æ¯ç"); |
| | | |
| | | // ========== MES ä»åºç®¡ç-å°è´§éç¥åï¼1-040-704-000ï¼ ========== |
| | | ErrorCode WM_ARRIVAL_NOTICE_NOT_EXISTS = new ErrorCode(1_040_704_000, "å°è´§éç¥åä¸åå¨"); |
| | | ErrorCode WM_ARRIVAL_NOTICE_CODE_DUPLICATE = new ErrorCode(1_040_704_001, "å°è´§éç¥åç¼ç å·²åå¨"); |
| | |
| | | "å
¥åºåå
³èäºå°è´§éç¥åï¼å¿
须鿩å°è´§éç¥åè¡"); |
| | | ErrorCode WM_ITEM_RECEIPT_LINE_ARRIVAL_NOTICE_LINE_NOT_ALLOWED = new ErrorCode(1_040_705_102, |
| | | "å
¥åºåæªå
³èå°è´§éç¥åï¼ä¸è½éæ©å°è´§éç¥åè¡"); |
| | | ErrorCode WM_ITEM_RECEIPT_LINE_QUANTITY_REQUIRED = new ErrorCode(1_040_705_103, |
| | | "请填åå
¥åºæ°éï¼æéæ©å½å
¥åä½å¹¶å¡«åå½å
¥æ°éåç±ç³»ç»èªå¨æ¢ç®"); |
| | | ErrorCode WM_ITEM_RECEIPT_DETAIL_NOT_EXISTS = new ErrorCode(1_040_705_200, "éè´å
¥åºæç»ä¸åå¨"); |
| | | ErrorCode WM_ITEM_RECEIPT_DETAIL_QUANTITY_EXCEED = new ErrorCode(1_040_705_202, "䏿¶æç»æ»æ°éä¸è½è¶
è¿è¡å
¥åºæ°é"); |
| | | ErrorCode WM_ITEM_RECEIPT_BATCH_REQUIRED = new ErrorCode(1_040_705_203, "ç©æã{}-{}ãå·²å¼å¯æ¹æ¬¡ç®¡çï¼ä¸æ¶æç»çæ¹æ¬¡å·ä¸è½ä¸ºç©º"); |
| | |
| | | ErrorCode WM_OUTSOURCE_ISSUE_CANCEL_NOT_ALLOWED = new ErrorCode(1_040_707_007, "已宿æå·²åæ¶çåæåä¸å
è®¸åæ¶"); |
| | | ErrorCode WM_OUTSOURCE_ISSUE_LINE_NOT_EXISTS = new ErrorCode(1_040_707_100, "å¤ååæåè¡ä¸åå¨"); |
| | | ErrorCode WM_OUTSOURCE_ISSUE_LINE_ITEM_NOT_IN_BOM = new ErrorCode(1_040_707_101, "åæåè¡å¯¹åºçç©æä¸å¨å½åå·¥åç BOM å表ä¸"); |
| | | ErrorCode WM_OUTSOURCE_ISSUE_LINE_QUANTITY_REQUIRED = new ErrorCode(1_040_707_102, |
| | | "请填ååºåºæ°éï¼æéæ©å½å
¥åä½å¹¶å¡«åå½å
¥æ°éåç±ç³»ç»èªå¨æ¢ç®"); |
| | | ErrorCode WM_OUTSOURCE_ISSUE_DETAIL_NOT_EXISTS = new ErrorCode(1_040_707_200, "å¤ååæåæç»ä¸åå¨"); |
| | | ErrorCode WM_OUTSOURCE_ISSUE_DETAIL_LINE_NOT_MATCH = new ErrorCode(1_040_707_201, "æ£è´§æç»ä¸å±äºæå®çå¤ååæå"); |
| | | ErrorCode WM_OUTSOURCE_ISSUE_DETAIL_ITEM_MISMATCH = new ErrorCode(1_040_707_202, "æ£è´§æç»çç©æä¸å¤ååæåè¡çç©æä¸ä¸è´"); |
| | |
| | | ErrorCode WM_PRODUCT_ISSUE_LINE_NOT_EXISTS = new ErrorCode(1_040_708_100, "çäº§é¢æåºåºåè¡ä¸åå¨"); |
| | | ErrorCode WM_PRODUCT_ISSUE_LINE_ITEM_NOT_IN_BOM = new ErrorCode(1_040_708_101, "å½åç©æä¸å¨ç产工åç BOM ç©ææ¸
åä¸"); |
| | | ErrorCode WM_PRODUCT_ISSUE_CODE_DUPLICATE = new ErrorCode(1_040_708_102, "颿åºåºåç¼ç å·²åå¨"); |
| | | ErrorCode WM_PRODUCT_ISSUE_LINE_QUANTITY_REQUIRED = new ErrorCode(1_040_708_103, |
| | | "请填ååºåºæ°éï¼æéæ©å½å
¥åä½å¹¶å¡«åå½å
¥æ°éåç±ç³»ç»èªå¨æ¢ç®"); |
| | | ErrorCode WM_PRODUCT_ISSUE_DETAIL_NOT_EXISTS = new ErrorCode(1_040_708_200, "çäº§é¢æåºåºåæç»ä¸åå¨"); |
| | | ErrorCode WM_PRODUCT_ISSUE_DETAIL_ITEM_MISMATCH = new ErrorCode(1_040_708_201, "æ£è´§æç»çç©æä¸é¢æåè¡çç©æä¸ä¸è´"); |
| | | ErrorCode WM_PRODUCT_ISSUE_DETAIL_LINE_NOT_MATCH = new ErrorCode(1_040_708_202, "æ£è´§æç»ä¸å±äºæå®ç颿åºåºå"); |
| | |
| | | ErrorCode WM_RETURN_VENDOR_NO_DETAIL = new ErrorCode(1_040_711_006, "ä¾åºåéè´§åæ²¡ææ£è´§æç»ï¼æ æ³æ§è¡éè´§"); |
| | | ErrorCode WM_RETURN_VENDOR_DETAIL_ITEM_MISMATCH = new ErrorCode(1_040_711_007, "æ£è´§æç»çç©æä¸éè´§åè¡çç©æä¸ä¸è´"); |
| | | ErrorCode WM_RETURN_VENDOR_LINE_NOT_EXISTS = new ErrorCode(1_040_711_100, "ä¾åºåéè´§åè¡ä¸åå¨"); |
| | | ErrorCode WM_RETURN_VENDOR_LINE_QUANTITY_REQUIRED = new ErrorCode(1_040_711_101, |
| | | "请填åéè´§æ°éï¼æéæ©å½å
¥åä½å¹¶å¡«åå½å
¥æ°éåç±ç³»ç»èªå¨æ¢ç®"); |
| | | ErrorCode WM_RETURN_VENDOR_DETAIL_NOT_EXISTS = new ErrorCode(1_040_711_200, "ä¾åºåéè´§åæç»ä¸åå¨"); |
| | | ErrorCode WM_RETURN_VENDOR_DETAIL_QUANTITY_INVALID = new ErrorCode(1_040_711_201, "éè´§æç»æ°éå¿
é¡»å¤§äº 0"); |
| | | ErrorCode WM_RETURN_VENDOR_DETAIL_LINE_NOT_MATCH = new ErrorCode(1_040_711_202, "æ£è´§æç»ä¸å±äºæå®çä¾åºåéè´§å"); |
| | |
| | | "åºåºè¡æ¹æ¬¡å·ä¸åè´§éç¥åè¡æ¹æ¬¡å·ä¸ä¸è´"); |
| | | ErrorCode WM_PRODUCT_SALES_LINE_NOTICE_LINE_OQC_MISMATCH = new ErrorCode(1_040_714_033, |
| | | "åºåºè¡ OQC æ£éªæ è¯ä¸åè´§éç¥åè¡ä¸ä¸è´"); |
| | | ErrorCode WM_PRODUCT_SALES_LINE_QUANTITY_REQUIRED = new ErrorCode(1_040_714_034, |
| | | "请填ååºåºæ°éï¼æéæ©å½å
¥åä½å¹¶å¡«åå½å
¥æ°éåç±ç³»ç»èªå¨æ¢ç®"); |
| | | |
| | | // ========== MES ä»åºç®¡ç-æé¡¹åºåºåï¼1-040-715-000ï¼ ========== |
| | | ErrorCode WM_MISC_ISSUE_NOT_EXISTS = new ErrorCode(1_040_715_000, "æé¡¹åºåºåä¸åå¨"); |
| | |
| | | ErrorCode WM_MISC_ISSUE_CANCEL_NOT_ALLOWED = new ErrorCode(1_040_715_004, "æé¡¹åºåºå已宿æå·²åæ¶ï¼æ æ³åæ¶"); |
| | | ErrorCode WM_MISC_ISSUE_DETAIL_QUANTITY_MISMATCH = new ErrorCode(1_040_715_005, "æé¡¹åºåºåè¡æ°éä¸æç»æ°éä¸ä¸è´"); |
| | | ErrorCode WM_MISC_ISSUE_LINE_NOT_EXISTS = new ErrorCode(1_040_715_100, "æé¡¹åºåºåè¡ä¸åå¨"); |
| | | ErrorCode WM_MISC_ISSUE_LINE_QUANTITY_REQUIRED = new ErrorCode(1_040_715_101, |
| | | "请填ååºåºæ°éï¼æéæ©å½å
¥åä½å¹¶å¡«åå½å
¥æ°éåç±ç³»ç»èªå¨æ¢ç®"); |
| | | ErrorCode WM_MISC_ISSUE_DETAIL_NOT_EXISTS = new ErrorCode(1_040_715_200, "æé¡¹åºåºåæç»ä¸åå¨"); |
| | | |
| | | // ========== MES ä»åºç®¡ç-æé¡¹å
¥åºåï¼1-040-716-000ï¼ ========== |
| | |
| | | void deleteMachinery(Long id); |
| | | |
| | | /** |
| | | * æ¹éå é¤è®¾å¤ |
| | | * |
| | | * @param ids ç¼å·æ°ç» |
| | | */ |
| | | void deleteMachineryList(Collection<Long> ids); |
| | | |
| | | /** |
| | | * è·å¾è®¾å¤ |
| | | * |
| | | * @param id ç¼å· |
| | |
| | | import cn.hutool.core.util.ObjUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; |
| | | import cn.iocoder.yudao.framework.common.exception.ServiceException; |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.dv.machinery.vo.MesDvMachineryImportExcelVO; |
| | |
| | | @Override |
| | | public void deleteMachinery(Long id) { |
| | | // æ ¡éªåå¨ |
| | | validateMachineryExists(id); |
| | | MesDvMachineryDO machinery = machineryMapper.selectById(id); |
| | | if (machinery == null) { |
| | | throw exception(DV_MACHINERY_NOT_EXISTS); |
| | | } |
| | | // æ ¡éªå
³èæ°æ® |
| | | if (checkPlanMachineryService.getCheckPlanMachineryCountByMachineryId(id) > 0) { |
| | | throw exception(DV_MACHINERY_HAS_CHECK_PLAN); |
| | | } |
| | | if (checkRecordService.getCheckRecordCountByMachineryId(id) > 0) { |
| | | throw exception(DV_MACHINERY_HAS_CHECK_RECORD); |
| | | } |
| | | if (maintenRecordService.getMaintenRecordCountByMachineryId(id) > 0) { |
| | | throw exception(DV_MACHINERY_HAS_MAINTEN_RECORD); |
| | | } |
| | | if (repairService.getRepairCountByMachineryId(id) > 0) { |
| | | throw exception(DV_MACHINERY_HAS_REPAIR); |
| | | } |
| | | validateMachineryDeletable(machinery); |
| | | |
| | | // å é¤ |
| | | machineryMapper.deleteById(id); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void deleteMachineryList(Collection<Long> ids) { |
| | | if (CollUtil.isEmpty(ids)) { |
| | | return; |
| | | } |
| | | // é个å é¤ï¼å¤ç¨åæ¡å é¤é»è¾ï¼ä¿ææ ¡éªï¼ï¼ä»»ä¸å¤±è´¥åæ´ä½åæ» |
| | | ids.forEach(this::deleteMachinery); |
| | | } |
| | | |
| | | /** |
| | | * æ ¡éªè®¾å¤æ¯å¦å¯å é¤ï¼å
³èç¹æ£è®¡å/ç¹æ£è®°å½/ä¿å
»è®°å½/维修记å½ä»»ä¸åå¨åä¸å
è®¸ï¼ |
| | | * |
| | | * @param machinery è®¾å¤ |
| | | */ |
| | | private void validateMachineryDeletable(MesDvMachineryDO machinery) { |
| | | Long id = machinery.getId(); |
| | | String label = StrUtil.format("{}ï¼{}ï¼", machinery.getName(), machinery.getCode()); |
| | | if (checkPlanMachineryService.getCheckPlanMachineryCountByMachineryId(id) > 0) { |
| | | throw new ServiceException(DV_MACHINERY_HAS_CHECK_PLAN.getCode(), |
| | | StrUtil.format("设å¤{}å·²å
³èç¹æ£è®¡åï¼æ æ³å é¤ï¼è¯·å
å¨ç¹æ£è®¡åä¸ç§»é¤è¯¥è®¾å¤åéè¯", label)); |
| | | } |
| | | if (checkRecordService.getCheckRecordCountByMachineryId(id) > 0) { |
| | | throw new ServiceException(DV_MACHINERY_HAS_CHECK_RECORD.getCode(), |
| | | StrUtil.format("设å¤{}å·²åå¨ç¹æ£è®°å½ï¼æ æ³å é¤ï¼å¦éå é¤è¯·å
å¤ç该设å¤çç¹æ£è®°å½", label)); |
| | | } |
| | | if (maintenRecordService.getMaintenRecordCountByMachineryId(id) > 0) { |
| | | throw new ServiceException(DV_MACHINERY_HAS_MAINTEN_RECORD.getCode(), |
| | | StrUtil.format("设å¤{}å·²åå¨ä¿å
»è®°å½ï¼æ æ³å é¤ï¼å¦éå é¤è¯·å
å¤ç该设å¤çä¿å
»è®°å½", label)); |
| | | } |
| | | if (repairService.getRepairCountByMachineryId(id) > 0) { |
| | | throw new ServiceException(DV_MACHINERY_HAS_REPAIR.getCode(), |
| | | StrUtil.format("设å¤{}å·²åå¨ç»´ä¿®è®°å½ï¼æ æ³å é¤ï¼å¦éå é¤è¯·å
å¤ç该设å¤ç维修记å½", label)); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void validateMachineryExists(Long id) { |
| | | if (machineryMapper.selectById(id) == null) { |
| | | throw exception(DV_MACHINERY_NOT_EXISTS); |
| | |
| | | // 1.2 æ ¡éªæ¥æºåæ®åæ°ï¼å¹¶éªè¯æ°æ®åå¨ |
| | | String sourceDocCode = validateAndGetSourceDocCode( |
| | | createReqVO.getSourceDocType(), createReqVO.getSourceDocId(), createReqVO.getSourceLineId()); |
| | | // 1.3 ç¡®å®è´¨æ£æ¹æ¡ï¼æ¾å¼æå®æ¶æ ¡éªæ¹æ¡æ¬èº«å¯ç¨ï¼ä¸è¦æ±ä¸äº§åç©æç»å®ï¼ï¼æªæå®æ¶æç©æå·²ç»å®æ¹æ¡å
åº |
| | | // 1.3 ç¡®å®è´¨æ£æ¹æ¡ï¼è´¨æ£æ¹æ¡ä¸äº§åç©æä¸ç»å®ï¼æ¾å¼æå®æ¶åªæ ¡éªæ¹æ¡æ¬èº«å¯ç¨ï¼æªæå®æ¶èµ°é»è®¤æ¹æ¡è§£æ |
| | | Long templateId; |
| | | if (createReqVO.getTemplateId() != null) { |
| | | MesQcTemplateDO template = templateService.getTemplate(createReqVO.getTemplateId()); |
| | |
| | | } |
| | | templateId = template.getId(); |
| | | } else { |
| | | templateId = templateItemService.getRequiredTemplateByItemIdAndType( |
| | | createReqVO.getItemId(), MesQcTypeEnum.IQC.getType()).getTemplateId(); |
| | | templateId = resolveDefaultIqcTemplateId(createReqVO.getItemId()); |
| | | } |
| | | |
| | | // 2. æå
¥ä¸»è¡¨ |
| | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public Long createIqcFromArrivalNotice(Long noticeId, MesWmArrivalNoticeLineDO line, String noticeCode, Long vendorId) { |
| | | // 1. æ ¡éªç©ææ¯å¦é
ç½®äº IQC æ£éªæ¨¡æ¿ |
| | | MesQcTemplateItemDO templateItem; |
| | | try { |
| | | templateItem = templateItemService.getRequiredTemplateByItemIdAndType( |
| | | line.getItemId(), MesQcTypeEnum.IQC.getType()); |
| | | } catch (Exception e) { |
| | | // è·åç©æä¿¡æ¯ï¼æä¾æ´æç¡®çé误æç¤º |
| | | String itemInfo = getItemInfo(line.getItemId()); |
| | | throw exception(QC_NO_TEMPLATE_FOR_ITEM, itemInfo); |
| | | } |
| | | Long templateId = templateItem.getTemplateId(); |
| | | // 1. ç¡®å®è´¨æ£æ¹æ¡ï¼è´¨æ£æ¹æ¡ä¸äº§åç©æä¸ç»å®ï¼ç©ææªç»å®æ¹æ¡æ¶åä»»ä¸å¯ç¨çæ¥ææ£éªæ¹æ¡ |
| | | Long templateId = resolveDefaultIqcTemplateId(line.getItemId()); |
| | | |
| | | // 2. çææ£éªåç¼ç |
| | | String code = "IQC" + System.currentTimeMillis(); |
| | |
| | | } |
| | | |
| | | /** |
| | | * è·åç©æä¿¡æ¯ï¼ç¼ç +åç§°ï¼ |
| | | * è§£ææ¥ææ£éªçé»è®¤è´¨æ£æ¹æ¡ï¼è´¨æ£æ¹æ¡ä¸äº§åç©æä¸ç»å®ã |
| | | * |
| | | * 1. ç©æå·²ç»å®æ¥ææ£éªæ¹æ¡æ¶ï¼ä¼å
沿ç¨ï¼å
¼å®¹åéé
ç½®ï¼ï¼ |
| | | * 2. ç©ææªç»å®æ¶ï¼åä»»ä¸å¯ç¨ä¸æ£æµç§ç±»å
嫿¥ææ£éªçæ¹æ¡ï¼æç¼å·åææ©å建çä¸ä¸ªï¼ã |
| | | * |
| | | * @param itemId 产åç©æç¼å· |
| | | * @return è´¨æ£æ¹æ¡ç¼å· |
| | | */ |
| | | private String getItemInfo(Long itemId) { |
| | | if (itemId == null) { |
| | | return "æªç¥ç©æ"; |
| | | private Long resolveDefaultIqcTemplateId(Long itemId) { |
| | | List<MesQcTemplateItemDO> boundList = templateItemService.getTemplateItemList( |
| | | itemId, MesQcTypeEnum.IQC.getType(), null, null); |
| | | if (CollUtil.isNotEmpty(boundList)) { |
| | | return boundList.get(0).getTemplateId(); |
| | | } |
| | | try { |
| | | cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemRespDTO item = mdmItemApi.getItem(itemId).getCheckedData(); |
| | | if (item != null) { |
| | | return item.getCode() + "-" + item.getName(); |
| | | List<MesQcTemplateDO> enabledTemplates = templateService.getEnabledTemplateListByType(MesQcTypeEnum.IQC.getType()); |
| | | if (CollUtil.isEmpty(enabledTemplates)) { |
| | | throw exception(QC_IQC_NO_ENABLED_TEMPLATE); |
| | | } |
| | | } catch (Exception e) { |
| | | // 忽ç¥å¼å¸¸ |
| | | } |
| | | return "ç©æID:" + itemId; |
| | | return enabledTemplates.stream() |
| | | .map(MesQcTemplateDO::getId) |
| | | .min(Comparator.naturalOrder()) |
| | | .orElseThrow(() -> exception(QC_IQC_NO_ENABLED_TEMPLATE)); |
| | | } |
| | | |
| | | @Override |
| | |
| | | import cn.iocoder.yudao.module.mes.dal.mysql.wm.itemreceipt.MesWmItemReceiptLineMapper; |
| | | import cn.iocoder.yudao.module.mes.service.wm.arrivalnotice.MesWmArrivalNoticeLineService; |
| | | import cn.iocoder.yudao.module.mes.service.wm.batch.MesWmBatchService; |
| | | import cn.iocoder.yudao.module.mes.service.wm.unitconvert.MesWmItemUnitConvertService; |
| | | import jakarta.annotation.Resource; |
| | | import org.springframework.context.annotation.Lazy; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.validation.annotation.Validated; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.List; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| | |
| | | private MesWmArrivalNoticeLineService arrivalNoticeLineService; |
| | | @Resource |
| | | private MesWmBatchService batchService; |
| | | @Resource |
| | | private MesWmItemUnitConvertService itemUnitConvertService; |
| | | |
| | | @Override |
| | | public Long createItemReceiptLine(MesWmItemReceiptLineSaveReqVO createReqVO) { |
| | |
| | | |
| | | // 3.1 å建å
¥åºåè¡ |
| | | MesWmItemReceiptLineDO line = BeanUtils.toBean(createReqVO, MesWmItemReceiptLineDO.class); |
| | | // 3.2 çææè·åæ¹æ¬¡ |
| | | // 3.2 åå使¢ç® |
| | | fillReceivedQuantity(line, createReqVO); |
| | | // 3.3 çææè·åæ¹æ¬¡ |
| | | MesWmBatchDO batch = generateOrGetBatch(receipt, createReqVO); |
| | | if (batch != null) { |
| | | line.setBatchId(batch.getId()); |
| | | line.setBatchCode(batch.getCode()); |
| | | } |
| | | // 3.3 æå
¥æ°æ®åº |
| | | // 3.4 æå
¥æ°æ®åº |
| | | itemReceiptLineMapper.insert(line); |
| | | return line.getId(); |
| | | } |
| | |
| | | |
| | | // 2.1 æ´æ° |
| | | MesWmItemReceiptLineDO updateObj = BeanUtils.toBean(updateReqVO, MesWmItemReceiptLineDO.class); |
| | | // 2.2 çææè·åæ¹æ¬¡ |
| | | // 2.2 åå使¢ç® |
| | | fillReceivedQuantity(updateObj, updateReqVO); |
| | | // 2.3 çææè·åæ¹æ¬¡ |
| | | MesWmBatchDO batch = generateOrGetBatch(receipt, updateReqVO); |
| | | if (batch != null) { |
| | | updateObj.setBatchId(batch.getId()).setBatchCode(batch.getCode()); |
| | | } |
| | | // 2.3 æ´æ°æ°æ®åº |
| | | // 2.4 æ´æ°æ°æ®åº |
| | | itemReceiptLineMapper.updateById(updateObj); |
| | | } |
| | | |
| | | /** |
| | | * åå使¢ç®ï¼æå½å
¥åä½ä¸æéåå·ï¼æå½å
¥æ°éæ¢ç®ä¸ºç©æä¸»åä½çå
¥åºæ°é |
| | | * |
| | | * æªéæ©å½å
¥å使¶ï¼è¯´ææ¬æ¬¡æç©æä¸»åä½å½å
¥ï¼ç´æ¥ä½¿ç¨ä¼ å
¥çå
¥åºæ°éã |
| | | */ |
| | | private void fillReceivedQuantity(MesWmItemReceiptLineDO line, MesWmItemReceiptLineSaveReqVO reqVO) { |
| | | if (reqVO.getEnterUnitMeasureId() != null) { |
| | | BigDecimal primaryQuantity = itemUnitConvertService.convertToPrimaryUnit( |
| | | reqVO.getItemId(), reqVO.getItemModelId(), |
| | | reqVO.getEnterUnitMeasureId(), reqVO.getEnterQuantity()); |
| | | if (primaryQuantity != null) { |
| | | line.setReceivedQuantity(primaryQuantity); |
| | | } |
| | | } |
| | | if (line.getReceivedQuantity() == null) { |
| | | throw exception(WM_ITEM_RECEIPT_LINE_QUANTITY_REQUIRED); |
| | | } |
| | | } |
| | | |
| | | private void validateItemReceiptLineSaveData(MesWmItemReceiptDO receipt, MesWmItemReceiptLineSaveReqVO reqVO) { |
| | | // æ ¡éªå
³èå°è´§éç¥åè¡ |
| | | validateArrivalNoticeLine(receipt, reqVO.getArrivalNoticeLineId()); |
| | |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.miscissue.MesWmMiscIssueLineDO; |
| | | import cn.iocoder.yudao.module.mes.dal.mysql.wm.miscissue.MesWmMiscIssueLineMapper; |
| | | import cn.iocoder.yudao.module.mes.service.mdm.MesMdmItemService; |
| | | import cn.iocoder.yudao.module.mes.service.wm.unitconvert.MesWmItemUnitConvertService; |
| | | import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseAreaService; |
| | | import jakarta.annotation.Resource; |
| | | import org.springframework.context.annotation.Lazy; |
| | |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.validation.annotation.Validated; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.List; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| | | import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.WM_MISC_ISSUE_LINE_NOT_EXISTS; |
| | | import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.WM_MISC_ISSUE_LINE_QUANTITY_REQUIRED; |
| | | |
| | | /** |
| | | * MES æé¡¹åºåºåè¡ Service å®ç°ç±» |
| | |
| | | private MesMdmItemService mdmItemService; |
| | | @Resource |
| | | private MesWmWarehouseAreaService warehouseAreaService; |
| | | @Resource |
| | | private MesWmItemUnitConvertService itemUnitConvertService; |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | |
| | | // 1. æ ¡éªæ°æ® |
| | | validateMiscIssueLineSaveData(createReqVO.getIssueId(), createReqVO); |
| | | |
| | | // 2. æ°å¢è¡ |
| | | // 2. åå使¢ç®ï¼æå½å
¥å使¢ç®ä¸ºç©æä¸»å使°é |
| | | fillPrimaryQuantity(createReqVO); |
| | | |
| | | // 3. æ°å¢è¡ |
| | | MesWmMiscIssueLineDO line = BeanUtils.toBean(createReqVO, MesWmMiscIssueLineDO.class); |
| | | miscIssueLineMapper.insert(line); |
| | | |
| | | // 3.èªå¨å建æç» |
| | | // 4.èªå¨å建æç» |
| | | createReqVO.setId(line.getId()); |
| | | miscIssueDetailService.createMiscIssueDetail(createReqVO); |
| | | return line.getId(); |
| | |
| | | // 1.2 æ ¡éªæ°æ® |
| | | validateMiscIssueLineSaveData(line.getIssueId(), updateReqVO); |
| | | |
| | | // 2. æ´æ°è¡ |
| | | // 2. åå使¢ç®ï¼æå½å
¥å使¢ç®ä¸ºç©æä¸»å使°é |
| | | fillPrimaryQuantity(updateReqVO); |
| | | |
| | | // 3. æ´æ°è¡ |
| | | MesWmMiscIssueLineDO updateObj = BeanUtils.toBean(updateReqVO, MesWmMiscIssueLineDO.class); |
| | | miscIssueLineMapper.updateById(updateObj); |
| | | |
| | | // 3. æ´æ°æç»ï¼åºäºè¡ä¿¡æ¯ï¼ |
| | | // 4. æ´æ°æç»ï¼åºäºè¡ä¿¡æ¯ï¼ |
| | | miscIssueDetailService.updateMiscIssueDetail(updateReqVO); |
| | | } |
| | | |
| | | /** |
| | | * åå使¢ç®ï¼éæ©äºå½å
¥å使¶ï¼æãå½å
¥æ°é à æ¢ç®æ¯çãå¾å°ç©æä¸»åä½å£å¾çåºåºæ°é |
| | | * |
| | | * æ¢ç®ç»æåå请æ±åæ°ï¼ä½¿è¡ä¸ 1:1 æç»çå£å¾ä¿æä¸è´ï¼æªæè¾
åä½å½å
¥æ¶å¿
é¡»ç´æ¥å¡«ååºåºæ°é |
| | | */ |
| | | private void fillPrimaryQuantity(MesWmMiscIssueLineSaveReqVO reqVO) { |
| | | if (reqVO.getEnterUnitMeasureId() != null) { |
| | | BigDecimal primaryQuantity = itemUnitConvertService.convertToPrimaryUnit( |
| | | reqVO.getItemId(), reqVO.getItemModelId(), |
| | | reqVO.getEnterUnitMeasureId(), reqVO.getEnterQuantity()); |
| | | if (primaryQuantity != null) { |
| | | reqVO.setQuantity(primaryQuantity); |
| | | } |
| | | } |
| | | if (reqVO.getQuantity() == null) { |
| | | throw exception(WM_MISC_ISSUE_LINE_QUANTITY_REQUIRED); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void deleteMiscIssueLine(Long id) { |
| | |
| | | import cn.iocoder.yudao.module.mes.service.mdm.MesMdmItemService; |
| | | import cn.iocoder.yudao.module.mes.service.pro.workorder.MesProWorkOrderBomService; |
| | | import cn.iocoder.yudao.module.mes.service.wm.batch.MesWmBatchService; |
| | | import cn.iocoder.yudao.module.mes.service.wm.unitconvert.MesWmItemUnitConvertService; |
| | | import jakarta.annotation.Resource; |
| | | import org.springframework.context.annotation.Lazy; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.validation.annotation.Validated; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.List; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| | | import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.WM_OUTSOURCE_ISSUE_LINE_NOT_EXISTS; |
| | | import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.WM_OUTSOURCE_ISSUE_LINE_ITEM_NOT_IN_BOM; |
| | | import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.WM_OUTSOURCE_ISSUE_LINE_QUANTITY_REQUIRED; |
| | | import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.WM_OUTSOURCE_ISSUE_NOT_EXISTS; |
| | | |
| | | /** |
| | |
| | | private MesWmBatchService batchService; |
| | | @Resource |
| | | private MesProWorkOrderBomService workOrderBomService; |
| | | @Resource |
| | | private MesWmItemUnitConvertService itemUnitConvertService; |
| | | |
| | | @Override |
| | | public Long createOutsourceIssueLine(MesWmOutsourceIssueLineSaveReqVO createReqVO) { |
| | |
| | | validateOutsourceIssueLineSaveData(createReqVO); |
| | | // æ ¹æ® batchCode è§£æ batchId |
| | | fillBatchId(createReqVO); |
| | | // åå使¢ç®ï¼æå½å
¥å使¢ç®ä¸ºç©æä¸»å使°é |
| | | fillPrimaryQuantity(createReqVO); |
| | | |
| | | // æå
¥ |
| | | MesWmOutsourceIssueLineDO line = BeanUtils.toBean(createReqVO, MesWmOutsourceIssueLineDO.class); |
| | |
| | | validateOutsourceIssueLineSaveData(updateReqVO); |
| | | // æ ¹æ® batchCode è§£æ batchId |
| | | fillBatchId(updateReqVO); |
| | | // åå使¢ç®ï¼æå½å
¥å使¢ç®ä¸ºç©æä¸»å使°é |
| | | fillPrimaryQuantity(updateReqVO); |
| | | |
| | | // æ´æ° |
| | | MesWmOutsourceIssueLineDO updateObj = BeanUtils.toBean(updateReqVO, MesWmOutsourceIssueLineDO.class); |
| | | outsourceIssueLineMapper.updateById(updateObj); |
| | | } |
| | | |
| | | /** |
| | | * åå使¢ç®ï¼éæ©äºå½å
¥å使¶ï¼æãå½å
¥æ°é à æ¢ç®æ¯çãå¾å°ç©æä¸»åä½å£å¾çåææ°é |
| | | * |
| | | * æªæè¾
åä½å½å
¥æ¶å¿
é¡»ç´æ¥å¡«ååææ°é |
| | | */ |
| | | private void fillPrimaryQuantity(MesWmOutsourceIssueLineSaveReqVO reqVO) { |
| | | if (reqVO.getEnterUnitMeasureId() != null) { |
| | | BigDecimal primaryQuantity = itemUnitConvertService.convertToPrimaryUnit( |
| | | reqVO.getItemId(), reqVO.getItemModelId(), |
| | | reqVO.getEnterUnitMeasureId(), reqVO.getEnterQuantity()); |
| | | if (primaryQuantity != null) { |
| | | reqVO.setQuantity(primaryQuantity); |
| | | } |
| | | } |
| | | if (reqVO.getQuantity() == null) { |
| | | throw exception(WM_OUTSOURCE_ISSUE_LINE_QUANTITY_REQUIRED); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void deleteOutsourceIssueLine(Long id) { |
| | | // æ ¡éªåå¨ |
| | |
| | | import cn.iocoder.yudao.module.mes.service.wm.productissue.MesWmProductIssueLineService; |
| | | import cn.iocoder.yudao.module.mes.service.wm.productissue.MesWmProductIssueService; |
| | | import cn.iocoder.yudao.module.mes.service.wm.returnissue.MesWmReturnIssueLineService; |
| | | import cn.iocoder.yudao.module.mes.service.wm.unitconvert.MesWmItemUnitConvertService; |
| | | import jakarta.annotation.Resource; |
| | | import org.springframework.context.annotation.Lazy; |
| | | import org.springframework.stereotype.Service; |
| | |
| | | private MesWmProductIssueDetailService issueDetailService; |
| | | @Resource |
| | | private MesProWorkOrderBomService workOrderBomService; |
| | | @Resource |
| | | private MesWmItemUnitConvertService itemUnitConvertService; |
| | | |
| | | @Override |
| | | public Long createProductIssueLine(MesWmProductIssueLineSaveReqVO createReqVO) { |
| | | validateProductIssueLineSaveData(createReqVO); |
| | | // åå使¢ç®ï¼æå½å
¥å使¢ç®ä¸ºç©æä¸»å使°é |
| | | fillPrimaryQuantity(createReqVO); |
| | | |
| | | // æå
¥ |
| | | MesWmProductIssueLineDO line = BeanUtils.toBean(createReqVO, MesWmProductIssueLineDO.class); |
| | |
| | | // æ ¡éªåå¨ |
| | | validateProductIssueLineExists(updateReqVO.getId()); |
| | | validateProductIssueLineSaveData(updateReqVO); |
| | | // åå使¢ç®ï¼æå½å
¥å使¢ç®ä¸ºç©æä¸»å使°é |
| | | fillPrimaryQuantity(updateReqVO); |
| | | |
| | | // æ´æ° |
| | | MesWmProductIssueLineDO updateObj = BeanUtils.toBean(updateReqVO, MesWmProductIssueLineDO.class); |
| | | issueLineMapper.updateById(updateObj); |
| | | } |
| | | |
| | | /** |
| | | * åå使¢ç®ï¼éæ©äºå½å
¥å使¶ï¼æãå½å
¥æ°é à æ¢ç®æ¯çãå¾å°ç©æä¸»åä½å£å¾ç颿æ°é |
| | | * |
| | | * æªæè¾
åä½å½å
¥æ¶å¿
é¡»ç´æ¥å¡«å颿æ°é |
| | | */ |
| | | private void fillPrimaryQuantity(MesWmProductIssueLineSaveReqVO reqVO) { |
| | | if (reqVO.getEnterUnitMeasureId() != null) { |
| | | BigDecimal primaryQuantity = itemUnitConvertService.convertToPrimaryUnit( |
| | | reqVO.getItemId(), reqVO.getItemModelId(), |
| | | reqVO.getEnterUnitMeasureId(), reqVO.getEnterQuantity()); |
| | | if (primaryQuantity != null) { |
| | | reqVO.setQuantity(primaryQuantity); |
| | | } |
| | | } |
| | | if (reqVO.getQuantity() == null) { |
| | | throw exception(WM_PRODUCT_ISSUE_LINE_QUANTITY_REQUIRED); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void deleteProductIssueLine(Long id) { |
| | | // æ ¡éªåå¨ |
| | |
| | | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.salesnotice.MesWmSalesNoticeLineDO; |
| | | import cn.iocoder.yudao.module.mes.service.wm.salesnotice.MesWmSalesNoticeLineService; |
| | | import cn.iocoder.yudao.module.mes.service.qc.oqc.MesQcOqcService; |
| | | import cn.iocoder.yudao.module.mes.service.wm.unitconvert.MesWmItemUnitConvertService; |
| | | import jakarta.annotation.Resource; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.context.annotation.Lazy; |
| | |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.validation.annotation.Validated; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.List; |
| | | import java.util.Objects; |
| | | |
| | |
| | | @Resource |
| | | @Lazy |
| | | private MesQcOqcService oqcService; |
| | | @Resource |
| | | private MesWmItemUnitConvertService itemUnitConvertService; |
| | | |
| | | @Override |
| | | public Long createProductSalesLine(MesWmProductSalesLineSaveReqVO createReqVO) { |
| | | // åå使¢ç®ï¼æå½å
¥å使¢ç®ä¸ºç©æä¸»å使°éï¼å¿
é¡»å
æ¢ç®ï¼åæ ¡éªä¸åè´§éç¥åè¡çæ°éä¸è´æ§ï¼ |
| | | fillPrimaryQuantity(createReqVO); |
| | | // æ ¡éªæ°æ® |
| | | validateLineSaveData(createReqVO); |
| | | |
| | |
| | | public void updateProductSalesLine(MesWmProductSalesLineSaveReqVO updateReqVO) { |
| | | // æ ¡éªåå¨ |
| | | MesWmProductSalesLineDO oldLine = validateProductSalesLineExists(updateReqVO.getId()); |
| | | // æ ¡éªæ°æ® |
| | | updateReqVO.setSalesId(oldLine.getSalesId()); |
| | | // åå使¢ç®ï¼æå½å
¥å使¢ç®ä¸ºç©æä¸»å使°éï¼å¿
é¡»å
æ¢ç®ï¼åæ ¡éªä¸åè´§éç¥åè¡çæ°éä¸è´æ§ï¼ |
| | | fillPrimaryQuantity(updateReqVO); |
| | | // æ ¡éªæ°æ® |
| | | validateLineSaveData(updateReqVO); |
| | | |
| | | // æ´æ° |
| | |
| | | } |
| | | |
| | | /** |
| | | * åå使¢ç®ï¼éæ©äºå½å
¥å使¶ï¼æãå½å
¥æ°é à æ¢ç®æ¯çãå¾å°ç©æä¸»åä½å£å¾çåºåºæ°é |
| | | * |
| | | * æªæè¾
åä½å½å
¥æ¶å¿
é¡»ç´æ¥å¡«ååºåºæ°é |
| | | */ |
| | | private void fillPrimaryQuantity(MesWmProductSalesLineSaveReqVO reqVO) { |
| | | if (reqVO.getEnterUnitMeasureId() != null) { |
| | | BigDecimal primaryQuantity = itemUnitConvertService.convertToPrimaryUnit( |
| | | reqVO.getItemId(), reqVO.getItemModelId(), |
| | | reqVO.getEnterUnitMeasureId(), reqVO.getEnterQuantity()); |
| | | if (primaryQuantity != null) { |
| | | reqVO.setQuantity(primaryQuantity); |
| | | } |
| | | } |
| | | if (reqVO.getQuantity() == null) { |
| | | throw exception(WM_PRODUCT_SALES_LINE_QUANTITY_REQUIRED); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ® batchCode è§£æ batchId |
| | | */ |
| | | private void fillBatchId(MesWmProductSalesLineSaveReqVO reqVO) { |
| | |
| | | import cn.iocoder.yudao.module.mes.dal.mysql.wm.returnvendor.MesWmReturnVendorLineMapper; |
| | | import cn.iocoder.yudao.module.mes.service.mdm.MesMdmItemService; |
| | | import cn.iocoder.yudao.module.mes.service.wm.batch.MesWmBatchService; |
| | | import cn.iocoder.yudao.module.mes.service.wm.unitconvert.MesWmItemUnitConvertService; |
| | | import jakarta.annotation.Resource; |
| | | import org.springframework.context.annotation.Lazy; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.validation.annotation.Validated; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.List; |
| | | import java.util.Set; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| | | import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.WM_RETURN_VENDOR_ITEM_NOT_IN_PURCHASE_ORDER; |
| | | import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.WM_RETURN_VENDOR_LINE_NOT_EXISTS; |
| | | import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.WM_RETURN_VENDOR_LINE_QUANTITY_REQUIRED; |
| | | |
| | | /** |
| | | * MES ä¾åºåéè´§åè¡ Service å®ç°ç±» |
| | |
| | | private MesWmBatchService batchService; |
| | | @Resource |
| | | private ErpPurchaseOrderApi purchaseOrderApi; |
| | | @Resource |
| | | private MesWmItemUnitConvertService itemUnitConvertService; |
| | | |
| | | @Override |
| | | public Long createReturnVendorLine(MesWmReturnVendorLineSaveReqVO createReqVO) { |
| | |
| | | MesWmReturnVendorDO returnVendor = validateReturnVendorLineSaveData(createReqVO); |
| | | // éè´§åè¥å·²å
³èéè´è®¢åï¼ç©æå¿
é¡»å±äºè¯¥éè´è®¢åï¼ç¦æ¢è·¨è®¢åéæéæ |
| | | validateReturnVendorItemInPurchaseOrder(returnVendor, createReqVO.getItemId(), null); |
| | | // åå使¢ç®ï¼æå½å
¥å使¢ç®ä¸ºç©æä¸»å使°é |
| | | fillPrimaryQuantity(createReqVO); |
| | | |
| | | // æå
¥ |
| | | MesWmReturnVendorLineDO line = BeanUtils.toBean(createReqVO, MesWmReturnVendorLineDO.class); |
| | |
| | | MesWmReturnVendorDO returnVendor = validateReturnVendorLineSaveData(updateReqVO); |
| | | // å
³èéè´è®¢åæ¶ï¼ä¸å
许æè¡ç©ææ¹æè®¢åå¤çç©æï¼ä»
æ¹æ°éçæä½ä¸åå½±å |
| | | validateReturnVendorItemInPurchaseOrder(returnVendor, updateReqVO.getItemId(), oldLine.getItemId()); |
| | | // åå使¢ç®ï¼æå½å
¥å使¢ç®ä¸ºç©æä¸»å使°é |
| | | fillPrimaryQuantity(updateReqVO); |
| | | |
| | | // æ´æ° |
| | | MesWmReturnVendorLineDO updateObj = BeanUtils.toBean(updateReqVO, MesWmReturnVendorLineDO.class); |
| | |
| | | } |
| | | |
| | | /** |
| | | * åå使¢ç®ï¼éæ©äºå½å
¥å使¶ï¼æãå½å
¥æ°é à æ¢ç®æ¯çãå¾å°ç©æä¸»åä½å£å¾çéè´§æ°é |
| | | * |
| | | * æªæè¾
åä½å½å
¥æ¶å¿
é¡»ç´æ¥å¡«åéè´§æ°é |
| | | */ |
| | | private void fillPrimaryQuantity(MesWmReturnVendorLineSaveReqVO reqVO) { |
| | | if (reqVO.getEnterUnitMeasureId() != null) { |
| | | BigDecimal primaryQuantity = itemUnitConvertService.convertToPrimaryUnit( |
| | | reqVO.getItemId(), reqVO.getItemModelId(), |
| | | reqVO.getEnterUnitMeasureId(), reqVO.getEnterQuantity()); |
| | | if (primaryQuantity != null) { |
| | | reqVO.setQuantity(primaryQuantity); |
| | | } |
| | | } |
| | | if (reqVO.getQuantity() == null) { |
| | | throw exception(WM_RETURN_VENDOR_LINE_QUANTITY_REQUIRED); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * æ ¡éªéè´§è¡ç©æå±äºæå
³èéè´è®¢åï¼éè´§åå·²å
³èéè´è®¢åæ¶ï¼ã |
| | | * |
| | | * éè´éè´§çç©æåºåèªå
³èéè´è®¢åï¼æ¤å¤ä¸ºå端å
åºï¼é²æ¢éè¿æ¥å£è·¨è®¢åéæéæã |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mes.service.wm.unitconvert; |
| | | |
| | | import java.math.BigDecimal; |
| | | |
| | | /** |
| | | * MES ç©æä¸»è¾
å使¢ç® Service æ¥å£ |
| | | * |
| | | * åºå
¥åºåæ®è¡çæ°éç»ä¸æç©æä¸»åä½è®°è´¦ï¼æ¬æå¡è´è´£æãæè¾
åä½/åå·åä½å½å
¥çæ°éã |
| | | * æ¢ç®æä¸»å使°éãæ¢ç®æ¯çæ¥æºä¼å
çº§ï¼ |
| | | * 1. è¡ä¸æå®çç©æåå·ï¼åå·ä¸é
ç½®çåä½ + æ¯çï¼ï¼ |
| | | * 2. ç©æä¸»æ°æ®ä¸çè¾
åä½ 1 / è¾
åä½ 2ï¼åéé
ç½®ï¼ï¼ |
| | | * 3. ç©æåå·ä¸è¯¥åä½ä¸å¯ä¸çæ¯çã |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | public interface MesWmItemUnitConvertService { |
| | | |
| | | /** |
| | | * è§£ææ¢ç®æ¯çï¼1 个æå®åä½ = N ä¸ªç©æä¸»åä½ |
| | | * |
| | | * @param itemId ç©æç¼å· |
| | | * @param itemModelId ç©æåå·ç¼å·ï¼å¯ä¸ºç©ºï¼ |
| | | * @param unitMeasureId å½å
¥åä½ç¼å·ï¼å¯ä¸ºç©ºï¼ä¸ºç©ºè§ä¸ºä¸»åä½ï¼ |
| | | * @return æ¢ç®æ¯çï¼ä¸»åä½ææªæå®å使¶è¿å 1 |
| | | */ |
| | | BigDecimal resolveRateToPrimaryUnit(Long itemId, Long itemModelId, Long unitMeasureId); |
| | | |
| | | /** |
| | | * å°å½å
¥æ°éæ¢ç®ä¸ºç©æä¸»å使°é |
| | | * |
| | | * @param itemId ç©æç¼å· |
| | | * @param itemModelId ç©æåå·ç¼å·ï¼å¯ä¸ºç©ºï¼ |
| | | * @param unitMeasureId å½å
¥åä½ç¼å·ï¼å¯ä¸ºç©ºï¼ä¸ºç©ºè§ä¸ºä¸»åä½ï¼ |
| | | * @param enterQuantity å½å
¥æ°é |
| | | * @return 主å使°éï¼å½å
¥åä½å³ä¸»å使¶åæ ·è¿å |
| | | */ |
| | | BigDecimal convertToPrimaryUnit(Long itemId, Long itemModelId, Long unitMeasureId, BigDecimal enterQuantity); |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.mes.service.wm.unitconvert; |
| | | |
| | | import cn.hutool.core.util.ObjUtil; |
| | | import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; |
| | | import cn.iocoder.yudao.framework.common.exception.ServiceException; |
| | | import cn.iocoder.yudao.module.mdm.api.item.MdmItemApi; |
| | | import cn.iocoder.yudao.module.mdm.api.item.MdmItemModelApi; |
| | | import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemModelRespDTO; |
| | | import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemRespDTO; |
| | | import cn.iocoder.yudao.module.mdm.api.unit.MdmUnitMeasureApi; |
| | | import cn.iocoder.yudao.module.mdm.api.unit.dto.MdmUnitMeasureRespDTO; |
| | | import jakarta.annotation.Resource; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.validation.annotation.Validated; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.List; |
| | | |
| | | import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; |
| | | |
| | | /** |
| | | * MES ç©æä¸»è¾
å使¢ç® Service å®ç°ç±» |
| | | * |
| | | * @author è¶
级管çå |
| | | */ |
| | | @Service |
| | | @Validated |
| | | public class MesWmItemUnitConvertServiceImpl implements MesWmItemUnitConvertService { |
| | | |
| | | @Resource |
| | | private MdmItemApi mdmItemApi; |
| | | @Resource |
| | | private MdmItemModelApi mdmItemModelApi; |
| | | @Resource |
| | | private MdmUnitMeasureApi mdmUnitMeasureApi; |
| | | |
| | | @Override |
| | | public BigDecimal resolveRateToPrimaryUnit(Long itemId, Long itemModelId, Long unitMeasureId) { |
| | | MdmItemRespDTO item = mdmItemApi.validateItemExists(itemId).getCheckedData(); |
| | | // 1. æªæå®å½å
¥åä½ï¼æå½å
¥åä½å°±æ¯ç©æä¸»åä½ â æ¯ç 1 |
| | | if (unitMeasureId == null || ObjUtil.equal(item.getUnitMeasureId(), unitMeasureId)) { |
| | | return BigDecimal.ONE; |
| | | } |
| | | // 2. æå®äºåå· â 以åå·ä¸é
ç½®çåä½ä¸æ¯ç为å |
| | | if (itemModelId != null) { |
| | | MdmItemModelRespDTO model = mdmItemModelApi.validateItemModelExistsAndEnable(itemModelId, itemId) |
| | | .getCheckedData(); |
| | | if (ObjUtil.notEqual(model.getUnitMeasureId(), unitMeasureId)) { |
| | | throw new ServiceException(WM_ITEM_UNIT_CONVERT_MODEL_UNIT_MISMATCH.getCode(), String.format( |
| | | "æéåå·ã%sãç计éå使¯ã%sãï¼ä¸æ¬æ¬¡å½å
¥åä½ã%sãä¸ä¸è´ï¼è¯·éæ°éæ©åå·ææ¹ååå·å¯¹åºç计éåä½", |
| | | model.getModel(), unitName(model.getUnitMeasureId()), unitName(unitMeasureId))); |
| | | } |
| | | return validateRate(model); |
| | | } |
| | | // 3. æªæå®åå· â å
å¹é
ç©æä¸»æ°æ®ä¸çè¾
åä½ 1 / è¾
åä½ 2 |
| | | if (ObjUtil.equal(item.getUnitMeasureId2(), unitMeasureId) && item.getUnitMeasureRate1() != null) { |
| | | return item.getUnitMeasureRate1(); |
| | | } |
| | | if (ObjUtil.equal(item.getUnitMeasureId3(), unitMeasureId) && item.getUnitMeasureRate2() != null) { |
| | | return item.getUnitMeasureRate2(); |
| | | } |
| | | // 4. åä»ç©æåå·ä¸æ¾è¯¥åä½ï¼æ¯çå¯ä¸å¯ç´æ¥ä½¿ç¨ï¼æ¯çæå¤ä¸ªåå¼åå¿
é¡»æå®åå· |
| | | List<MdmItemModelRespDTO> models = mdmItemModelApi.getItemModelListByItemId(itemId).getCheckedData().stream() |
| | | .filter(model -> ObjUtil.equal(model.getUnitMeasureId(), unitMeasureId)) |
| | | .filter(model -> CommonStatusEnum.ENABLE.getStatus().equals(model.getStatus())) |
| | | .toList(); |
| | | List<BigDecimal> distinctRates = models.stream() |
| | | .map(MdmItemModelRespDTO::getUnitMeasureRate) |
| | | .filter(java.util.Objects::nonNull) |
| | | .distinct() |
| | | .toList(); |
| | | if (distinctRates.size() > 1) { |
| | | throw new ServiceException(WM_ITEM_UNIT_CONVERT_MODEL_REQUIRED.getCode(), String.format( |
| | | "ç©æã%s-%sãä¸ä½¿ç¨è®¡éåä½ã%sãçåå·æå¤ä¸ªä¸æ¢ç®æ¯çä¸åï¼è¯·å
éæ©åå·ååå½å
¥æ°é", |
| | | item.getCode(), item.getName(), unitName(unitMeasureId))); |
| | | } |
| | | if (distinctRates.size() == 1) { |
| | | return validateRate(distinctRates.get(0), models.get(0).getModel()); |
| | | } |
| | | // 5. ä¸»æ°æ®ä¸åå·åæªé
置该åä½çæ¢ç®æ¯ç |
| | | throw new ServiceException(WM_ITEM_UNIT_CONVERT_NOT_CONFIGURED.getCode(), String.format( |
| | | "ç©æã%s-%sãæ²¡æé
置计éåä½ã%sãå°ä¸»åä½ã%sãçæ¢ç®æ¯çï¼æ æ³æ¢ç®ï¼" |
| | | + "请å
å°ãåºç¡æ°æ®-ç©æä¸»æ°æ®-åå·ãä¸ºè¯¥ç©ææ°å¢åå·å¹¶å¡«åæ¢ç®æ¯ç", |
| | | item.getCode(), item.getName(), unitName(unitMeasureId), unitName(item.getUnitMeasureId()))); |
| | | } |
| | | |
| | | @Override |
| | | public BigDecimal convertToPrimaryUnit(Long itemId, Long itemModelId, Long unitMeasureId, BigDecimal enterQuantity) { |
| | | BigDecimal rate = resolveRateToPrimaryUnit(itemId, itemModelId, unitMeasureId); |
| | | // 1. å½å
¥åä½å³ä¸»åä½ â æ°éåæ ·è¿å |
| | | if (BigDecimal.ONE.compareTo(rate) == 0) { |
| | | return enterQuantity; |
| | | } |
| | | // 2. æé主åä½å½å
¥æ¶ï¼å½å
¥æ°éå¿
å¡« |
| | | if (enterQuantity == null) { |
| | | MdmItemRespDTO item = mdmItemApi.validateItemExists(itemId).getCheckedData(); |
| | | throw new ServiceException(WM_ITEM_UNIT_CONVERT_QUANTITY_REQUIRED.getCode(), String.format( |
| | | "计éåä½ã%sã䏿¯ç©æã%s-%sãç主åä½ï¼æè¯¥åä½å½å
¥æ¶å½å
¥æ°éä¸è½ä¸ºç©ºï¼è¯·å¡«åå½å
¥æ°éææ¹ç¨ä¸»åä½ã%sã", |
| | | unitName(unitMeasureId), item.getCode(), item.getName(), unitName(item.getUnitMeasureId()))); |
| | | } |
| | | // 3. è¾
å使°é à æ¢ç®æ¯ç = 主å使°é |
| | | return enterQuantity.multiply(rate); |
| | | } |
| | | |
| | | private BigDecimal validateRate(MdmItemModelRespDTO model) { |
| | | return validateRate(model.getUnitMeasureRate(), model.getModel()); |
| | | } |
| | | |
| | | private BigDecimal validateRate(BigDecimal rate, String modelName) { |
| | | if (rate == null || rate.compareTo(BigDecimal.ZERO) <= 0) { |
| | | throw new ServiceException(WM_ITEM_UNIT_CONVERT_RATE_INVALID.getCode(), String.format( |
| | | "åå·ã%sãçæ¢ç®æ¯ç为ã%sãä¸åçï¼1 个åå·åä½å¿
须对åºå¤§äº 0 ç主å使°éï¼" |
| | | + "请å°ãåºç¡æ°æ®-ç©æä¸»æ°æ®-åå·ãä¿®æ£è¯¥åå·çæ¢ç®æ¯ç", |
| | | modelName, rate)); |
| | | } |
| | | return rate; |
| | | } |
| | | |
| | | private String unitName(Long unitMeasureId) { |
| | | if (unitMeasureId == null) { |
| | | return "æªæå®"; |
| | | } |
| | | MdmUnitMeasureRespDTO unit = mdmUnitMeasureApi.getUnitMeasure(unitMeasureId).getCheckedData(); |
| | | return unit != null ? unit.getName() : "ID=" + unitMeasureId; |
| | | } |
| | | |
| | | } |