xiaoyi
3 天以前 abf1c0a35d85d38239ff5d2ed746a4e4b797c9d1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
package cn.iocoder.yudao.module.mes.controller.admin.pd.ctc;
 
import cn.hutool.core.collection.CollUtil;
import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
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.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.module.mdm.api.item.MdmItemApi;
import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemRespDTO;
import cn.iocoder.yudao.module.mes.controller.admin.pd.ctc.vo.*;
import cn.iocoder.yudao.module.mes.dal.dataobject.pd.ctc.ProductCtcDO;
import cn.iocoder.yudao.module.mes.service.pd.ctc.ProductCtcService;
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.servlet.http.HttpServletResponse;
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.io.IOException;
import java.util.Collections;
import java.util.List;
import java.util.Map;
 
import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
 
@Tag(name = "管理后台 - 换位导线产品技术参数")
@RestController
@RequestMapping("/mes/pd/ctc")
@Validated
public class ProductCtcController {
 
    @Resource
    private ProductCtcService ctcService;
 
    @Resource
    private MdmItemApi mdmItemApi;
 
    @PostMapping("/create")
    @Operation(summary = "创建换位导线产品技术参数")
    @PreAuthorize("@ss.hasPermission('mes:pd-ctc:create')")
    public CommonResult<Long> createCtc(@Valid @RequestBody ProductCtcSaveReqVO createReqVO) {
        return success(ctcService.createCtc(createReqVO));
    }
 
    @PutMapping("/update")
    @Operation(summary = "更新换位导线产品技术参数")
    @PreAuthorize("@ss.hasPermission('mes:pd-ctc:update')")
    public CommonResult<Boolean> updateCtc(@Valid @RequestBody ProductCtcSaveReqVO updateReqVO) {
        ctcService.updateCtc(updateReqVO);
        return success(true);
    }
 
    @DeleteMapping("/delete")
    @Operation(summary = "删除换位导线产品技术参数")
    @Parameter(name = "id", description = "编号", required = true)
    @PreAuthorize("@ss.hasPermission('mes:pd-ctc:delete')")
    public CommonResult<Boolean> deleteCtc(@RequestParam("id") Long id) {
        ctcService.deleteCtc(id);
        return success(true);
    }
 
    @GetMapping("/get")
    @Operation(summary = "获得换位导线产品技术参数")
    @Parameter(name = "id", description = "编号", required = true, example = "1024")
    @PreAuthorize("@ss.hasPermission('mes:pd-ctc:query')")
    public CommonResult<ProductCtcRespVO> getCtc(@RequestParam("id") Long id) {
        ProductCtcDO ctc = ctcService.getCtc(id);
        if (ctc == null) {
            return success(null);
        }
        return success(buildCtcRespVOList(Collections.singletonList(ctc)).get(0));
    }
 
    @GetMapping("/page")
    @Operation(summary = "获得换位导线产品技术参数分页")
    @PreAuthorize("@ss.hasPermission('mes:pd-ctc:query')")
    public CommonResult<PageResult<ProductCtcRespVO>> getCtcPage(@Valid ProductCtcPageReqVO pageReqVO) {
        PageResult<ProductCtcDO> pageResult = ctcService.getCtcPage(pageReqVO);
        return success(new PageResult<>(buildCtcRespVOList(pageResult.getList()), pageResult.getTotal()));
    }
 
    @GetMapping("/export-excel")
    @Operation(summary = "导出换位导线产品技术参数 Excel")
    @PreAuthorize("@ss.hasPermission('mes:pd-ctc:export')")
    @ApiAccessLog(operateType = EXPORT)
    public void exportCtcExcel(@Valid ProductCtcPageReqVO pageReqVO,
                               HttpServletResponse response) throws IOException {
        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
        List<ProductCtcDO> list = ctcService.getCtcPage(pageReqVO).getList();
        ExcelUtils.write(response, "换位导线产品技术参数.xls", "数据", ProductCtcRespVO.class,
                buildCtcRespVOList(list));
    }
 
    @PostMapping("/calc-angle")
    @Operation(summary = "绕包角度计算(已知纸带宽度)")
    @PreAuthorize("@ss.hasPermission('mes:pd-ctc:query')")
    public CommonResult<ProductCtcAngleCalcRespVO> calcAngle(@Valid @RequestBody ProductCtcAngleCalcReqVO reqVO) {
        return success(ctcService.calcAngle(reqVO));
    }
 
    @PostMapping("/calc-resistance")
    @Operation(summary = "直流电阻计算(按温度换算)")
    @PreAuthorize("@ss.hasPermission('mes:pd-ctc:query')")
    public CommonResult<ProductCtcResistanceCalcRespVO> calcResistance(@Valid @RequestBody ProductCtcResistanceCalcReqVO reqVO) {
        return success(ctcService.calcResistance(reqVO));
    }
 
    @PostMapping("/calc-reel")
    @Operation(summary = "盘具容量计算(每盘最大长度)")
    @PreAuthorize("@ss.hasPermission('mes:pd-ctc:query')")
    public CommonResult<ProductCtcReelCalcRespVO> calcReelCapacity(@Valid @RequestBody ProductCtcReelCalcReqVO reqVO) {
        return success(ctcService.calcReelCapacity(reqVO));
    }
 
    // ==================== 拼接 VO ====================
 
    private List<ProductCtcRespVO> buildCtcRespVOList(List<ProductCtcDO> list) {
        if (CollUtil.isEmpty(list)) {
            return Collections.emptyList();
        }
        // 批量获取物料信息
        Map<Long, MdmItemRespDTO> itemMap = mdmItemApi.getItemMap(convertSet(list, ProductCtcDO::getItemId));
        // 拼接 VO
        return BeanUtils.toBean(list, ProductCtcRespVO.class, vo -> {
            MapUtils.findAndThen(itemMap, vo.getItemId(),
                    item -> {
                        vo.setItemName(item.getName());
                        vo.setItemCode(item.getCode());
                    });
        });
    }
 
}