| | |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.framework.dict.core.DictFrameworkUtils; |
| | | import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.qc.ipqc.vo.MesQcIpqcImportExcelVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.qc.ipqc.vo.MesQcIpqcPageReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.qc.ipqc.vo.MesQcIpqcRespVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.qc.ipqc.vo.MesQcIpqcSaveReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.qc.ipqc.vo.MesQcIpqcTemplateProcessRespVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.qc.ipqc.vo.MesQcIpqcWageFieldRespVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.qc.ipqc.vo.MesQcIpqcWageFieldSaveReqVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.qc.vo.MesQcImportRespVO; |
| | | import cn.iocoder.yudao.module.mes.controller.admin.qc.vo.MesQcQualityExportVO; |
| | | 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.mysql.qc.ipqc.MesQcIpqcLineMapper; |
| | | import cn.iocoder.yudao.module.mes.enums.DictTypeConstants; |
| | | import cn.iocoder.yudao.module.mes.enums.MesBizTypeConstants; |
| | | import cn.iocoder.yudao.module.mes.enums.qc.MesQcTypeEnum; |
| | | import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService; |
| | | import cn.iocoder.yudao.module.mes.service.md.unitmeasure.MesMdUnitMeasureService; |
| | | import cn.iocoder.yudao.module.mes.service.md.workstation.MesMdWorkstationService; |
| | |
| | | import cn.iocoder.yudao.module.mes.service.qc.indicator.MesQcIndicatorService; |
| | | import cn.iocoder.yudao.module.mes.service.qc.indicatorresult.MesQcIndicatorResultService; |
| | | import cn.iocoder.yudao.module.mes.service.qc.ipqc.MesQcIpqcService; |
| | | import cn.iocoder.yudao.module.mes.service.qc.ipqc.MesQcIpqcWageFieldService; |
| | | import cn.iocoder.yudao.module.mes.service.qc.template.MesQcTemplateProcessService; |
| | | import cn.iocoder.yudao.module.system.api.user.AdminUserApi; |
| | | import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; |
| | | import io.swagger.v3.oas.annotations.Operation; |
| | |
| | | import org.springframework.security.access.prepost.PreAuthorize; |
| | | import org.springframework.validation.annotation.Validated; |
| | | import org.springframework.web.bind.annotation.*; |
| | | import org.springframework.web.multipart.MultipartFile; |
| | | |
| | | import java.io.IOException; |
| | | import java.math.BigDecimal; |
| | | import java.util.ArrayList; |
| | | import java.util.Collections; |
| | | import java.util.HashMap; |
| | |
| | | private MesQcIndicatorService indicatorService; |
| | | @Resource |
| | | private MesQcIpqcLineMapper ipqcLineMapper; |
| | | @Resource |
| | | private MesQcTemplateProcessService templateProcessService; |
| | | @Resource |
| | | private MesQcIpqcWageFieldService ipqcWageFieldService; |
| | | |
| | | @Resource |
| | | private AdminUserApi adminUserApi; |
| | |
| | | return success(true); |
| | | } |
| | | |
| | | @GetMapping("/template-by-process") |
| | | @Operation(summary = "按工序获取默认质检方案及检测指标字段") |
| | | @Parameter(name = "processId", description = "工序编号", required = true) |
| | | @Parameter(name = "type", description = "质检种类,默认 2-过程检验", example = "2") |
| | | public CommonResult<MesQcIpqcTemplateProcessRespVO> getTemplateByProcess( |
| | | @RequestParam("processId") Long processId, |
| | | @RequestParam(value = "type", required = false) Integer type) { |
| | | return success(templateProcessService.resolveTemplate(processId, |
| | | type != null ? type : MesQcTypeEnum.IPQC.getType())); |
| | | } |
| | | |
| | | @GetMapping("/wage-field/list") |
| | | @Operation(summary = "按工序获取过程检验单工资字段(工序自定义字段,质检填写)") |
| | | @Parameter(name = "processId", description = "工序编号;空时按 ipqcId 解析") |
| | | @Parameter(name = "ipqcId", description = "过程检验单编号;新建时不传,用于加载已填写的值") |
| | | public CommonResult<List<MesQcIpqcWageFieldRespVO>> getWageFieldList( |
| | | @RequestParam(value = "processId", required = false) Long processId, |
| | | @RequestParam(value = "ipqcId", required = false) Long ipqcId) { |
| | | return success(ipqcWageFieldService.getFieldList(processId, ipqcId)); |
| | | } |
| | | |
| | | @PostMapping("/wage-field/save") |
| | | @Operation(summary = "保存过程检验单工资字段值") |
| | | @PreAuthorize("@ss.hasAnyPermissions('mes:qc-ipqc:create', 'mes:qc-ipqc:update')") |
| | | public CommonResult<Boolean> saveWageFieldValues(@Valid @RequestBody MesQcIpqcWageFieldSaveReqVO reqVO) { |
| | | ipqcWageFieldService.saveValues(reqVO); |
| | | return success(true); |
| | | } |
| | | |
| | | @GetMapping("/get") |
| | | @Operation(summary = "获得过程检验单") |
| | | @Parameter(name = "id", description = "编号", required = true, example = "1024") |
| | | @PreAuthorize("@ss.hasPermission('mes:qc-ipqc:query')") |
| | | public CommonResult<MesQcIpqcRespVO> getIpqc(@RequestParam("id") Long id) { |
| | | MesQcIpqcDO ipqc = ipqcService.getIpqc(id); |
| | | return success(buildIpqcRespVOList(Collections.singletonList(ipqc)).get(0)); |
| | |
| | | |
| | | @GetMapping("/page") |
| | | @Operation(summary = "获得过程检验单分页") |
| | | @PreAuthorize("@ss.hasPermission('mes:qc-ipqc:query')") |
| | | public CommonResult<PageResult<MesQcIpqcRespVO>> getIpqcPage(@Valid MesQcIpqcPageReqVO pageReqVO) { |
| | | PageResult<MesQcIpqcDO> pageResult = ipqcService.getIpqcPage(pageReqVO); |
| | | return success(new PageResult<>(buildIpqcRespVOList(pageResult.getList()), pageResult.getTotal())); |
| | |
| | | List<MesQcIpqcDO> list = ipqcService.getIpqcPage(pageReqVO).getList(); |
| | | List<MesQcQualityExportVO> exportList = buildIpqcQualityExportList(list); |
| | | ExcelUtils.write(response, "过程检验单.xls", "数据", MesQcQualityExportVO.class, exportList); |
| | | } |
| | | |
| | | @GetMapping("/get-import-template") |
| | | @Operation(summary = "获得导入过程检验单模板") |
| | | @PreAuthorize("@ss.hasPermission('mes:qc-ipqc:import')") |
| | | public void importTemplate(HttpServletResponse response) throws IOException { |
| | | List<MesQcIpqcImportExcelVO> list = Collections.singletonList( |
| | | MesQcIpqcImportExcelVO.builder() |
| | | .name("示例-XX工单过程检验").type("首检").workOrderCode("MO20260101000001") |
| | | .workstationName("示例工位").templateName("") |
| | | .checkQuantity(new BigDecimal("100")).qualifiedQuantity(new BigDecimal("95")) |
| | | .unqualifiedQuantity(new BigDecimal("5")).laborScrapQuantity(new BigDecimal("2")) |
| | | .materialScrapQuantity(new BigDecimal("2")).otherScrapQuantity(new BigDecimal("1")) |
| | | .checkResult("校验通过").inspectorName("").inspectDate("2026-01-01 10:00:00") |
| | | .remark("示例数据,导入前请替换") |
| | | .build()); |
| | | ExcelUtils.write(response, "过程检验单导入模板.xls", "过程检验", MesQcIpqcImportExcelVO.class, list); |
| | | } |
| | | |
| | | @PostMapping("/import") |
| | | @Operation(summary = "导入过程检验单") |
| | | @PreAuthorize("@ss.hasPermission('mes:qc-ipqc:import')") |
| | | public CommonResult<MesQcImportRespVO> importIpqcExcel(@RequestParam("file") MultipartFile file) throws Exception { |
| | | List<MesQcIpqcImportExcelVO> list = ExcelUtils.read(file, MesQcIpqcImportExcelVO.class); |
| | | return success(ipqcService.importIpqcList(list)); |
| | | } |
| | | |
| | | // ==================== 拼接 VO ==================== |
| | |
| | | String value = detail.getValue(); |
| | | String remark = detail.getRemark(); |
| | | // 格式化为 "指标名称:值" 或 "指标名称:值(备注)" |
| | | String indicatorStr = indicatorName + ":" + value; |
| | | String indicatorStr = indicatorName + ":" + (StrUtil.isBlank(value) ? "未填写" : value); |
| | | if (StrUtil.isNotBlank(remark)) { |
| | | indicatorStr += "(" + remark + ")"; |
| | | } |