admin
2024-07-11 09ceef0603c39adc3b00650c33e9bb945e0ad2dd
提交 | 用户 | 时间
0ca254 1 package com.jcdm.main.om.productionOrde.controller;
A 2
3 import java.util.ArrayList;
4 import java.util.Date;
5 import java.util.List;
35c489 6 import java.util.concurrent.CompletableFuture;
0ca254 7 import javax.servlet.http.HttpServletResponse;
A 8
35c489 9 import cn.hutool.core.util.ObjectUtil;
0ca254 10 import cn.hutool.json.JSONObject;
A 11 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
12 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
13 import com.jcdm.common.core.domain.entity.SysUser;
14 import com.jcdm.common.core.domain.model.LoginUser;
15 import com.jcdm.common.utils.ServletUtils;
16 import com.jcdm.common.utils.StringUtils;
22c9e0 17 import com.jcdm.framework.websocket.WebSocketUsers;
35c489 18 import com.jcdm.main.constant.Constants;
0ca254 19 import com.jcdm.main.om.productionOrde.domain.OmProductionOrdeInfo;
A 20 import com.jcdm.main.om.productionOrde.domain.OmProductionOrdeInfoExcelImport;
21 import com.jcdm.main.om.productionOrde.mapper.OmProductionOrdeInfoMapper;
22 import com.jcdm.main.om.productionOrde.service.IOmProductionOrdeInfoService;
23 import com.jcdm.main.restful.factoryMes.service.RestfulService;
22c9e0 24 import com.kangaroohy.milo.model.ReadWriteEntity;
A 25 import com.kangaroohy.milo.service.MiloService;
0ca254 26 import lombok.extern.slf4j.Slf4j;
A 27 import org.aspectj.weaver.loadtime.Aj;
28 import org.slf4j.Logger;
29 import org.slf4j.LoggerFactory;
30 import org.springframework.security.access.prepost.PreAuthorize;
31 import org.springframework.beans.factory.annotation.Autowired;
32 import org.springframework.web.bind.annotation.GetMapping;
33 import org.springframework.web.bind.annotation.PostMapping;
34 import org.springframework.web.bind.annotation.PutMapping;
35 import org.springframework.web.bind.annotation.DeleteMapping;
36 import org.springframework.web.bind.annotation.PathVariable;
37 import org.springframework.web.bind.annotation.RequestBody;
38 import org.springframework.web.bind.annotation.RequestMapping;
39 import org.springframework.web.bind.annotation.RestController;
40 import com.jcdm.common.annotation.Log;
41 import com.jcdm.common.core.controller.BaseController;
42 import com.jcdm.common.core.domain.AjaxResult;
43 import com.jcdm.common.enums.BusinessType;
44 import com.jcdm.common.utils.poi.ExcelUtil;
45 import com.jcdm.common.core.page.TableDataInfo;
46 import org.springframework.web.multipart.MultipartFile;
47
48 /**
49  * 生产工单Controller
50  * 
51  * @author ruimin
52  * @date 2023-12-11
53  */
54 @Slf4j
55 @RestController
56 @RequestMapping("/om/productionOrde")
57 public class OmProductionOrdeInfoController extends BaseController
58 {
59     private static final Logger logger = LoggerFactory.getLogger("sys-user");
60
61     @Autowired
62     private IOmProductionOrdeInfoService omProductionOrdeInfoService;
22c9e0 63
A 64     @Autowired
65     private MiloService miloService;
0ca254 66
A 67     /**
68      * 查询生产工单列表
69      */
70     @PreAuthorize("@ss.hasPermi('om:productionOrde:list')")
71     @GetMapping("/list")
72     public TableDataInfo list(OmProductionOrdeInfo omProductionOrdeInfo)
73     {
74         startPage();
75 //        List<OmProductionOrdeInfo> list = omProductionOrdeInfoService.list(new LambdaQueryWrapper<OmProductionOrdeInfo>().eq(OmProductionOrdeInfo::getWorkOrderNo, "W_202403120001"));
76         List<OmProductionOrdeInfo> list = omProductionOrdeInfoService.selectOmProductionOrdeInfoList(omProductionOrdeInfo);
77         return getDataTable(list);
78     }
79
80     @GetMapping("/checkCarCode")
81     public AjaxResult checkCarCode(OmProductionOrdeInfo omProductionOrdeInfo)
82     {
83         Integer i = 0;
84         List<OmProductionOrdeInfo> list = omProductionOrdeInfoService.list(new LambdaQueryWrapper<OmProductionOrdeInfo>().eq(OmProductionOrdeInfo::getProductNum, omProductionOrdeInfo.getProductNum()));
85         if(StringUtils.isNotBlank(list.get(0).getTrolleyYard())){
86             i = 1;
87         }
88         return AjaxResult.success(i);
89     }
90
91     @GetMapping("/checkYzSfcCode")
92     public AjaxResult checkYzSfcCode(OmProductionOrdeInfo omProductionOrdeInfo)
93     {
94         Integer i = 0;
95         List<OmProductionOrdeInfo> list = omProductionOrdeInfoService.list(new LambdaQueryWrapper<OmProductionOrdeInfo>().eq(OmProductionOrdeInfo::getProductNum, omProductionOrdeInfo.getProductNum()));
96         if(StringUtils.isNotBlank(list.get(0).getSpareField2())){
97             i = 1;
98         }
99         return AjaxResult.success(i);
100     }
101
102     @GetMapping("/bindYzSfcFlag")
103     public AjaxResult bindYzSfcFlag(OmProductionOrdeInfo omProductionOrdeInfo)
104     {
105         List<OmProductionOrdeInfo> list = omProductionOrdeInfoService.list(new LambdaQueryWrapper<OmProductionOrdeInfo>().eq(OmProductionOrdeInfo::getProductNum, omProductionOrdeInfo.getProductNum()));
106         list.get(0).setSpareField2("1");
107         omProductionOrdeInfoService.saveOrUpdate(list.get(0));
108         return AjaxResult.success(null);
109     }
110
111     /**
112      * 导出生产工单列表
113      */
114     @PreAuthorize("@ss.hasPermi('om:productionOrde:export')")
115     @Log(title = "生产工单", businessType = BusinessType.EXPORT)
116     @PostMapping("/export")
117     public void export(HttpServletResponse response, OmProductionOrdeInfo omProductionOrdeInfo)
118     {
119         List<OmProductionOrdeInfo> list = omProductionOrdeInfoService.selectOmProductionOrdeInfoList(omProductionOrdeInfo);
120         ExcelUtil<OmProductionOrdeInfo> util = new ExcelUtil<OmProductionOrdeInfo>(OmProductionOrdeInfo.class);
121         util.exportExcel(response, list, "生产工单数据");
122     }
123
124     @GetMapping("/receivingWorkOrders")
6d32c5 125     public AjaxResult receivingWorkOrders() throws Exception {
0ca254 126         String paramProductNum = "";
6d32c5 127         Object productTypeObjcet = miloService.readFromOpcUa("thoroughfare" + "." + "device" + ".ProductType").getValue();//产品类型
35c489 128         if (ObjectUtil.isNull(productTypeObjcet)) {
C 129             return AjaxResult.error("接单失败,PLC未传输生产类型,请联系管理员");
130         }
131         String productType = productTypeObjcet.toString();//产品类型
132         String materialCode = Constants.materialMap.get(productType);
0ca254 133         // 查询最新的工单信息
22c9e0 134         OmProductionOrdeInfo lastOrder = omProductionOrdeInfoService.getLastOrder();
35c489 135         String orderJsonString = RestfulService.getProductionWorkOrderRequest(lastOrder.getProductNum(), "M1OP100",materialCode);
0ca254 136         JSONObject jsonObject = new JSONObject(orderJsonString);
A 137         // 从JSONObject中获取data对象
138         JSONObject dataObject = jsonObject.getJSONObject("data");
139         String code = jsonObject.getStr("code");
140         // 判断接单是否成功
141         if(code.equals("success")){
142             logger.info("请求工厂MES工单:入参pack{}出参pack:{}",paramProductNum,dataObject.getStr("productNum"));
143             List<OmProductionOrdeInfo> check = omProductionOrdeInfoService.list(new LambdaQueryWrapper<OmProductionOrdeInfo>().eq(OmProductionOrdeInfo::getProductNum,dataObject.getStr("productNum")));
144             if(check.size() == 0){
145                 OmProductionOrdeInfo omProductionOrdeInfo = new OmProductionOrdeInfo();
146                 omProductionOrdeInfo.setWorkOrderNo(dataObject.getStr("productionOrderNum"));
147                 omProductionOrdeInfo.setProductNum(dataObject.getStr("productNum"));
148                 omProductionOrdeInfo.setStationCode(dataObject.getStr("stationCode"));
149                 omProductionOrdeInfo.setMaterialCode(dataObject.getStr("materialCode"));
150                 omProductionOrdeInfo.setOnlineCompletionMark("0");
151                 omProductionOrdeInfo.setSfResult("0");
152                 if(dataObject.getStr("model").equals("PE01A")){
153                     omProductionOrdeInfo.setProductCode("1P102S");
154                 }else {
155                     omProductionOrdeInfo.setProductCode(dataObject.getStr("model"));
156                 }
157                 omProductionOrdeInfo.setCreateTime(new Date());
158                 omProductionOrdeInfo.setCreateUser("工厂MES");
159                 omProductionOrdeInfoService.save(omProductionOrdeInfo);
160             }
161         }else {
162             return AjaxResult.error("接单失败,请联系管理员");
163         }
164         return AjaxResult.success(dataObject.getStr("productNum"));
165     }
166
22c9e0 167     @GetMapping("/mozuReceivingWorkOrders")
1ebf2a 168     public AjaxResult mozuReceivingWorkOrders(OmProductionOrdeInfo paramOrder) throws Exception {
22c9e0 169         String paramProductNum = "";
09ceef 170         Object productTypeObjcet = miloService.readFromOpcUa("MOZU1." + paramOrder.getLineCode() + ".ProductType").getValue();//产品类型
1ebf2a 171         if (ObjectUtil.isNull(productTypeObjcet)) {
C 172             return AjaxResult.error("接单失败,PLC未传输生产类型,请联系管理员");
173         }
174         String productType = productTypeObjcet.toString();//产品类型
175         String materialCode = Constants.materialMap.get(productType);
176
22c9e0 177         OmProductionOrdeInfo lastOrder = omProductionOrdeInfoService.getLastOrder();
1ebf2a 178         String orderJsonString = RestfulService.getProductionWorkOrderRequest(lastOrder.getProductNum(), "M1OP100",materialCode);
22c9e0 179         JSONObject jsonObject = new JSONObject(orderJsonString);
A 180         // 从JSONObject中获取data对象
181         JSONObject dataObject = jsonObject.getJSONObject("data");
182         String code = jsonObject.getStr("code");
183         // 判断接单是否成功
184         if(code.equals("success")){
185             logger.info("请求工厂MES工单:入参pack{}出参pack:{}",paramProductNum,dataObject.getStr("productNum"));
186             List<OmProductionOrdeInfo> check = omProductionOrdeInfoService.list(new LambdaQueryWrapper<OmProductionOrdeInfo>().eq(OmProductionOrdeInfo::getProductNum,dataObject.getStr("productNum")));
187             if(check.size() == 0){
188                 try {
189                     log.info("请求工厂MES工单:入参pack{}出参pack:{}", paramProductNum, dataObject.getStr("productNum"));
190                     OmProductionOrdeInfo omProductionOrdeInfo = new OmProductionOrdeInfo();
191                     omProductionOrdeInfo.setWorkOrderNo(dataObject.getStr("productionOrderNum"));
192                     omProductionOrdeInfo.setProductNum(dataObject.getStr("productNum"));
193                     omProductionOrdeInfo.setStationCode(dataObject.getStr("stationCode"));
194                     omProductionOrdeInfo.setMaterialCode(dataObject.getStr("materialCode"));
195                     omProductionOrdeInfo.setOnlineCompletionMark("0");
196                     omProductionOrdeInfo.setSfResult("0");
197                     omProductionOrdeInfo.setProductCode(dataObject.getStr("model"));
198                     omProductionOrdeInfo.setCreateTime(new Date());
199                     omProductionOrdeInfo.setCreateUser("工厂MES");
200                     omProductionOrdeInfoService.save(omProductionOrdeInfo);
201                     //写PLC
202                     miloService.writeToOpcUa(ReadWriteEntity.builder().identifier("MOZU1." + paramOrder.getLineCode() + ".MES_WorkOrderNumber").value(dataObject.getStr("productionOrderNum")).build());
203                     miloService.writeToOpcUa(ReadWriteEntity.builder().identifier("MOZU1." + paramOrder.getLineCode() + ".MES_ModuleCode").value(dataObject.getStr("productNum")).build());
204                 } catch (Exception e) {
205                     throw new RuntimeException(e);
206                 }
207             }
208         }else {
209             return AjaxResult.error("接单失败,请联系管理员");
210         }
211         return AjaxResult.success(dataObject.getStr("productNum"));
212     }
213
0ca254 214     @GetMapping(value = "/jieBang/{id}")
A 215     public AjaxResult jieBang(@PathVariable("id") Long id)
216     {
217         OmProductionOrdeInfo byId = omProductionOrdeInfoService.getById(id);
218         byId.setTrolleyYard("");
219         return success(omProductionOrdeInfoService.saveOrUpdate(byId));
220     }
221
222     /**
223      * 获取生产工单详细信息
224      */
225     @PreAuthorize("@ss.hasPermi('om:productionOrde:query')")
226     @GetMapping(value = "/{id}")
227     public AjaxResult getInfo(@PathVariable("id") Long id)
228     {
229         return success(omProductionOrdeInfoService.selectOmProductionOrdeInfoById(id));
230     }
231
232     /**
233      * 新增生产工单
234      */
235     @PreAuthorize("@ss.hasPermi('om:productionOrde:add')")
236     @Log(title = "生产工单", businessType = BusinessType.INSERT)
237     @PostMapping
238     public AjaxResult add(@RequestBody OmProductionOrdeInfo omProductionOrdeInfo)
239     {
240         return toAjax(omProductionOrdeInfoService.insertOmProductionOrdeInfo(omProductionOrdeInfo));
241     }
242
243     /**
244      * 修改生产工单
245      */
246     @PreAuthorize("@ss.hasPermi('om:productionOrde:edit')")
247     @Log(title = "生产工单", businessType = BusinessType.UPDATE)
248     @PutMapping
249     public AjaxResult edit(@RequestBody OmProductionOrdeInfo omProductionOrdeInfo)
250     {
251         return toAjax(omProductionOrdeInfoService.updateOmProductionOrdeInfo(omProductionOrdeInfo));
252     }
253
254     /**
255      * 删除生产工单
256      */
257     @PreAuthorize("@ss.hasPermi('om:productionOrde:remove')")
258     @Log(title = "生产工单", businessType = BusinessType.DELETE)
259     @DeleteMapping("/{ids}")
260     public AjaxResult remove(@PathVariable Long[] ids)
261     {
262         return toAjax(omProductionOrdeInfoService.deleteOmProductionOrdeInfoByIds(ids));
263     }
264
265     /**
266      * table列上移下移
267      */
268     @Log(title = "生产工单", businessType = BusinessType.DELETE)
269     @GetMapping("/upDownMove")
270     public AjaxResult upDownMove(OmProductionOrdeInfo omProductionOrdeInfo)
271     {
272         return omProductionOrdeInfoService.upDownMove(omProductionOrdeInfo);
273     }
274
275     @PostMapping("/importData")
276     public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception
277     {
278         ExcelUtil<OmProductionOrdeInfo> util = new ExcelUtil<OmProductionOrdeInfo>(OmProductionOrdeInfo.class);
279         List<OmProductionOrdeInfo> ordeInfo = util.importExcel(file.getInputStream());
280         for (OmProductionOrdeInfo omProductionOrdeInfo : ordeInfo) {
281             omProductionOrdeInfo.setCreateTime(new Date());
282             omProductionOrdeInfo.setCreateBy("工厂MES");
283         }
284         omProductionOrdeInfoService.overrideSaveBatch(ordeInfo);
285         return AjaxResult.success();
286     }
287
288     @PostMapping("/importTemplate")
289     public void importTemplate(HttpServletResponse response)
290     {
291         ExcelUtil<OmProductionOrdeInfoExcelImport> util = new ExcelUtil<OmProductionOrdeInfoExcelImport>(OmProductionOrdeInfoExcelImport.class);
292         util.importTemplateExcel(response, "订单数据");
293     }
294
295     @PostMapping("/trolleyYardBinDing")
296     public AjaxResult trolleyYardBinDing(@RequestBody OmProductionOrdeInfo omProductionOrdeInfo)
297     {
298         return omProductionOrdeInfoService.trolleyYardBinDing(omProductionOrdeInfo);
299     }
300
301     @PostMapping("/getCarCodeSize")
302     public AjaxResult getCarCodeSize(@RequestBody OmProductionOrdeInfo omProductionOrdeInfo)
303     {
304         return omProductionOrdeInfoService.getCarCodeSize(omProductionOrdeInfo);
305     }
306
307     @PostMapping("/findBytrolleyYardGetOne")
308     public AjaxResult findBytrolleyYardGetOne(@RequestBody OmProductionOrdeInfo omProductionOrdeInfo)
309     {
310         return omProductionOrdeInfoService.findBytrolleyYardGetOne(omProductionOrdeInfo);
311     }
312
313     @GetMapping("/workReportingByStation/{id}/{stationCode}")
314     public AjaxResult workReportingByStation(@PathVariable("id") Long id, @PathVariable("stationCode") String stationCode)
315     {
316         OmProductionOrdeInfo omProductionOrdeInfo = new OmProductionOrdeInfo();
317         omProductionOrdeInfo.setId(id);
318         omProductionOrdeInfo.setStationCode(stationCode);
319         return omProductionOrdeInfoService.workReportingByStation(omProductionOrdeInfo);
320     }
321 }