package cn.iocoder.yudao.module.mes.controller.admin.pro.workorder;
|
|
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.ListUtil;
|
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
import cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.paramrecord.MesProWorkOrderParamRecordPageReqVO;
|
import cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.paramrecord.MesProWorkOrderParamRecordRespVO;
|
import cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.paramrecord.MesProWorkOrderParamRecordSaveReqVO;
|
import cn.iocoder.yudao.module.mes.dal.dataobject.md.unitmeasure.MesMdUnitMeasureDO;
|
import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkOrderParamRecordDO;
|
import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkOrderParamRecordDetailDO;
|
import cn.iocoder.yudao.module.mes.dal.mysql.pro.workorder.MesProWorkOrderParamRecordDetailMapper;
|
import cn.iocoder.yudao.module.mes.service.md.unitmeasure.MesMdUnitMeasureService;
|
import cn.iocoder.yudao.module.mes.service.pro.workorder.MesProWorkOrderParamRecordService;
|
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.*;
|
import java.util.stream.Collectors;
|
|
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
|
|
@Tag(name = "管理后台 - MES 生产工单参数记录")
|
@RestController
|
@RequestMapping("/mes/pro/work-order-param-record")
|
@Validated
|
public class MesProWorkOrderParamRecordController {
|
|
@Resource
|
private MesProWorkOrderParamRecordService paramRecordService;
|
@Resource
|
private MesProWorkOrderParamRecordDetailMapper paramRecordDetailMapper;
|
@Resource
|
private MesMdUnitMeasureService unitMeasureService;
|
|
@PostMapping("/create")
|
@Operation(summary = "创建工单参数记录")
|
@PreAuthorize("@ss.hasPermission('mes:pro-work-order:update')")
|
public CommonResult<Long> createParamRecord(@RequestParam("workOrderId") Long taskId,
|
@Valid @RequestBody MesProWorkOrderParamRecordSaveReqVO createReqVO) {
|
return success(paramRecordService.createParamRecord(taskId, createReqVO));
|
}
|
|
@PutMapping("/update")
|
@Operation(summary = "更新工单参数记录")
|
@PreAuthorize("@ss.hasPermission('mes:pro-work-order:update')")
|
public CommonResult<Boolean> updateParamRecord(@Valid @RequestBody MesProWorkOrderParamRecordSaveReqVO updateReqVO) {
|
paramRecordService.updateParamRecord(updateReqVO);
|
return success(true);
|
}
|
|
@DeleteMapping("/delete")
|
@Operation(summary = "删除工单参数记录")
|
@Parameter(name = "id", description = "编号", required = true)
|
@PreAuthorize("@ss.hasPermission('mes:pro-work-order:update')")
|
public CommonResult<Boolean> deleteParamRecord(@RequestParam("id") Long id) {
|
paramRecordService.deleteParamRecord(id);
|
return success(true);
|
}
|
|
@GetMapping("/get")
|
@Operation(summary = "获得工单参数记录")
|
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
@PreAuthorize("@ss.hasPermission('mes:pro-work-order:query')")
|
public CommonResult<MesProWorkOrderParamRecordRespVO> getParamRecord(@RequestParam("id") Long id) {
|
MesProWorkOrderParamRecordDO record = paramRecordService.getParamRecord(id);
|
if (record == null) {
|
return success(null);
|
}
|
return success(buildRecordRespVOList(ListUtil.of(record)).get(0));
|
}
|
|
@GetMapping("/page-by-work-order")
|
@Operation(summary = "按工单获得参数记录分页")
|
@PreAuthorize("@ss.hasPermission('mes:pro-work-order:query')")
|
public CommonResult<PageResult<MesProWorkOrderParamRecordRespVO>> getParamRecordPageByWorkOrderId(
|
@RequestParam("taskId") Long taskId,
|
@Valid MesProWorkOrderParamRecordPageReqVO pageReqVO) {
|
PageResult<MesProWorkOrderParamRecordDO> pageResult =
|
paramRecordService.getParamRecordPageByWorkOrderId(taskId, pageReqVO);
|
return success(new PageResult<>(buildRecordRespVOList(pageResult.getList()), pageResult.getTotal()));
|
}
|
|
// ==================== 拼接 VO ====================
|
|
private List<MesProWorkOrderParamRecordRespVO> buildRecordRespVOList(List<MesProWorkOrderParamRecordDO> list) {
|
if (CollUtil.isEmpty(list)) {
|
return Collections.emptyList();
|
}
|
// 1. 批量获取所有记录的明细
|
List<MesProWorkOrderParamRecordDetailDO> allDetails = paramRecordDetailMapper.selectListByRecordIds(
|
convertSet(list, MesProWorkOrderParamRecordDO::getId));
|
Map<Long, List<MesProWorkOrderParamRecordDetailDO>> detailMap = allDetails.stream()
|
.collect(Collectors.groupingBy(MesProWorkOrderParamRecordDetailDO::getRecordId));
|
|
// 2. 批量获取计量单位
|
Set<Long> unitMeasureIds = convertSet(allDetails, MesProWorkOrderParamRecordDetailDO::getUnitMeasureId);
|
Map<Long, MesMdUnitMeasureDO> unitMeasureMap = unitMeasureService.getUnitMeasureMap(unitMeasureIds);
|
|
// 3. 拼接 VO
|
return BeanUtils.toBean(list, MesProWorkOrderParamRecordRespVO.class, vo -> {
|
List<MesProWorkOrderParamRecordDetailDO> details = detailMap.get(vo.getId());
|
if (CollUtil.isNotEmpty(details)) {
|
List<MesProWorkOrderParamRecordRespVO.DetailResp> detailResps = BeanUtils.toBean(
|
details, MesProWorkOrderParamRecordRespVO.DetailResp.class,
|
detailResp -> MapUtils.findAndThen(unitMeasureMap, detailResp.getUnitMeasureId(),
|
unit -> detailResp.setUnitMeasureName(unit.getName()))
|
);
|
vo.setDetails(detailResps);
|
}
|
});
|
}
|
|
}
|