zzw
3 天以前 7858c25faa53dd2f4c0faae58618565ac5bb50ae
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
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
package com.emergencyrepair.business.controller;
 
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.emergencyrepair.business.dto.Requests;
import com.emergencyrepair.business.entity.Fault;
import com.emergencyrepair.business.entity.WorkOrder;
import com.emergencyrepair.business.service.BusinessService;
import com.emergencyrepair.business.service.EngineeringOrderPrintService;
import com.emergencyrepair.common.Result;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.format.annotation.DateTimeFormat;
 
import java.time.LocalDate;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.List;
 
@RestController
@RequestMapping("/api/faults")
@RequiredArgsConstructor
public class FaultController {
    private final BusinessService businessService;
    private final EngineeringOrderPrintService engineeringOrderPrintService;
 
    @GetMapping("/page")
    public Result<Page<Fault>> page(@RequestParam(defaultValue = "1") long current,
                                    @RequestParam(defaultValue = "20") long size,
                                    @RequestParam(required = false) String status,
                                    @RequestParam(required = false) String keyword,
                                    @RequestParam(required = false) String xNo,
                                    @RequestParam(required = false) String teamMajor,
                                    @RequestParam(required = false) String engineeringMajor,
                                    @RequestParam(required = false) String reportUnit,
                                    @RequestParam(required = false) String owner,
                                    @RequestParam(required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate reportDateStart,
                                    @RequestParam(required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate reportDateEnd,
                                    @RequestParam(required = false) String contractorName,
                                    @RequestParam(required = false) String faultNature) {
        return Result.ok(businessService.pageFaults(status, keyword, xNo, teamMajor, engineeringMajor,
                reportUnit, owner, reportDateStart, reportDateEnd, contractorName, faultNature, current, size));
    }
 
    @GetMapping
    public Result<List<Fault>> list(@RequestParam(required = false) String status,
                                    @RequestParam(required = false) String keyword,
                                    @RequestParam(required = false) String xNo,
                                    @RequestParam(required = false) String teamMajor,
                                    @RequestParam(required = false) String engineeringMajor,
                                    @RequestParam(required = false) String reportUnit,
                                    @RequestParam(required = false) String owner,
                                    @RequestParam(required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate reportDateStart,
                                    @RequestParam(required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate reportDateEnd,
                                    @RequestParam(required = false) String contractorName,
                                    @RequestParam(required = false) String faultNature) {
        return Result.ok(businessService.listFaults(status, keyword, xNo, teamMajor, engineeringMajor,
                reportUnit, owner, reportDateStart, reportDateEnd, contractorName, faultNature));
    }
 
    @PostMapping
    public Result<Fault> create(@RequestBody Fault fault) {
        fault.setId(null);
        return Result.ok(businessService.saveFault(fault));
    }
 
    @PutMapping("/{id}")
    public Result<Fault> update(@PathVariable Long id, @RequestBody Fault fault) {
        fault.setId(id);
        return Result.ok(businessService.saveFault(fault));
    }
 
    @DeleteMapping("/{id}")
    public Result<Void> delete(@PathVariable Long id) {
        businessService.deleteFault(id);
        return Result.ok();
    }
 
    @PostMapping("/cancel")
    public Result<Void> cancel(@RequestBody Requests.CancelRequest request) {
        businessService.cancelFaults(request);
        return Result.ok();
    }
 
    @PostMapping("/report")
    public Result<Void> report(@RequestBody Requests.IdList request) {
        businessService.reportFaults(request.getIds());
        return Result.ok();
    }
 
    @PostMapping("/review")
    public Result<Void> review(@RequestBody Requests.ReviewRequest request) {
        businessService.xcbReview(request);
        return Result.ok();
    }
 
    @PostMapping("/approve")
    public Result<Void> approve(@RequestBody Requests.ApprovalRequest request) {
        businessService.approve(request);
        return Result.ok();
    }
 
    @GetMapping("/dispatchable")
    public Result<List<Fault>> dispatchable(@RequestParam(required = false) String keyword) {
        return Result.ok(businessService.listFaults("JCC_DIRECTOR_APPROVED", keyword));
    }
 
    @PostMapping("/dispatch")
    public Result<List<WorkOrder>> dispatch(@RequestBody Requests.DispatchRequest request) {
        return Result.ok(businessService.dispatch(request));
    }
 
    /**
     * 工程单打印:把选中的故障记录套用 Word 模板生成四联工程单。
     */
    @PostMapping("/engineering-print")
    public ResponseEntity<byte[]> engineeringPrint(@RequestBody Requests.IdList request) {
        return documentResponse(engineeringOrderPrintService.render(request.getIds()),
                "工程单.docx", "engineering-order.docx");
    }
 
    /**
     * 打印工程单2:第1联全部明细后换页,再输出第2联,以此类推。
     */
    @PostMapping("/engineering-print-v2")
    public ResponseEntity<byte[]> engineeringPrintV2(@RequestBody Requests.IdList request) {
        return documentResponse(engineeringOrderPrintService.renderVersion2(request.getIds()),
                "工程单2.docx", "engineering-order-2.docx");
    }
 
    private ResponseEntity<byte[]> documentResponse(byte[] document, String displayName, String fallbackName) {
        String filename = encodeFilename(displayName, fallbackName);
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.parseMediaType(
                "application/vnd.openxmlformats-officedocument.wordprocessingml.document"));
        headers.set(HttpHeaders.CONTENT_DISPOSITION,
                "attachment; filename=\"" + fallbackName + "\"; filename*=UTF-8''" + filename);
        headers.setContentLength(document.length);
        return new ResponseEntity<>(document, headers, HttpStatus.OK);
    }
 
    private String encodeFilename(String name, String fallbackName) {
        try {
            return URLEncoder.encode(name, StandardCharsets.UTF_8.name()).replace("+", "%20");
        } catch (UnsupportedEncodingException exception) {
            return fallbackName;
        }
    }
}