package com.jcdm.main.om.productionOrde.controller; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.concurrent.CompletableFuture; import javax.servlet.http.HttpServletResponse; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.json.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.jcdm.common.core.domain.entity.SysUser; import com.jcdm.common.core.domain.model.LoginUser; import com.jcdm.common.utils.ServletUtils; import com.jcdm.common.utils.StringUtils; import com.jcdm.framework.websocket.WebSocketUsers; import com.jcdm.main.constant.Constants; import com.jcdm.main.om.productionOrde.domain.OmProductionOrdeInfo; import com.jcdm.main.om.productionOrde.domain.OmProductionOrdeInfoExcelImport; import com.jcdm.main.om.productionOrde.mapper.OmProductionOrdeInfoMapper; import com.jcdm.main.om.productionOrde.service.IOmProductionOrdeInfoService; import com.jcdm.main.restful.factoryMes.service.RestfulService; import com.kangaroohy.milo.model.ReadWriteEntity; import com.kangaroohy.milo.service.MiloService; import lombok.extern.slf4j.Slf4j; import org.aspectj.weaver.loadtime.Aj; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.jcdm.common.annotation.Log; import com.jcdm.common.core.controller.BaseController; import com.jcdm.common.core.domain.AjaxResult; import com.jcdm.common.enums.BusinessType; import com.jcdm.common.utils.poi.ExcelUtil; import com.jcdm.common.core.page.TableDataInfo; import org.springframework.web.multipart.MultipartFile; /** * 生产工单Controller * * @author ruimin * @date 2023-12-11 */ @Slf4j @RestController @RequestMapping("/om/productionOrde") public class OmProductionOrdeInfoController extends BaseController { private static final Logger logger = LoggerFactory.getLogger("sys-user"); @Autowired private IOmProductionOrdeInfoService omProductionOrdeInfoService; @Autowired private MiloService miloService; /** * 查询生产工单列表 */ @PreAuthorize("@ss.hasPermi('om:productionOrde:list')") @GetMapping("/list") public TableDataInfo list(OmProductionOrdeInfo omProductionOrdeInfo) { startPage(); // List list = omProductionOrdeInfoService.list(new LambdaQueryWrapper().eq(OmProductionOrdeInfo::getWorkOrderNo, "W_202403120001")); List list = omProductionOrdeInfoService.selectOmProductionOrdeInfoList(omProductionOrdeInfo); return getDataTable(list); } /** * 查询生产工单列表 */ @GetMapping("/listLoopLine") public TableDataInfo listLoopLine(OmProductionOrdeInfo omProductionOrdeInfo) { startPage(); List list = omProductionOrdeInfoService.listLoopLine(omProductionOrdeInfo); return getDataTable(list); } @GetMapping("/checkCarCode") public AjaxResult checkCarCode(OmProductionOrdeInfo omProductionOrdeInfo) { Integer i = 0; List list = omProductionOrdeInfoService.list(new LambdaQueryWrapper().eq(OmProductionOrdeInfo::getProductNum, omProductionOrdeInfo.getProductNum())); if(StringUtils.isNotBlank(list.get(0).getTrolleyYard())){ i = 1; } return AjaxResult.success(i); } @GetMapping("/checkYzSfcCode") public AjaxResult checkYzSfcCode(OmProductionOrdeInfo omProductionOrdeInfo) { Integer i = 0; List list = omProductionOrdeInfoService.list(new LambdaQueryWrapper().eq(OmProductionOrdeInfo::getProductNum, omProductionOrdeInfo.getProductNum())); if(StringUtils.isNotBlank(list.get(0).getSpareField2())){ i = 1; } return AjaxResult.success(i); } @GetMapping("/bindYzSfcFlag") public AjaxResult bindYzSfcFlag(OmProductionOrdeInfo omProductionOrdeInfo) { List list = omProductionOrdeInfoService.list(new LambdaQueryWrapper().eq(OmProductionOrdeInfo::getProductNum, omProductionOrdeInfo.getProductNum())); list.get(0).setSpareField2("1"); omProductionOrdeInfoService.saveOrUpdate(list.get(0)); return AjaxResult.success(null); } /** * 导出生产工单列表 */ @PreAuthorize("@ss.hasPermi('om:productionOrde:export')") @Log(title = "生产工单", businessType = BusinessType.EXPORT) @PostMapping("/export") public void export(HttpServletResponse response, OmProductionOrdeInfo omProductionOrdeInfo) { List list = omProductionOrdeInfoService.selectOmProductionOrdeInfoList(omProductionOrdeInfo); ExcelUtil util = new ExcelUtil(OmProductionOrdeInfo.class); util.exportExcel(response, list, "生产工单数据"); } @GetMapping("/mozuReceivingWorkOrders") public AjaxResult mozuReceivingWorkOrders(OmProductionOrdeInfo paramOrder) throws Exception { String paramProductNum = ""; Object productTypeObjcet = miloService.readFromOpcUa("MOZU1." + paramOrder.getLineCode() + ".ProductType").getValue();//产品类型 if (ObjectUtil.isNull(productTypeObjcet)) { return AjaxResult.error("接单失败,PLC未传输生产类型,请联系管理员!"); } String productType = productTypeObjcet.toString();//产品类型 String materialCode = Constants.materialMap.get(productType); //先查询表中是否有剩余工单 List orderList = omProductionOrdeInfoService.list(new LambdaQueryWrapper() .eq(OmProductionOrdeInfo::getOrderStatus, Constants.ONE) .eq(OmProductionOrdeInfo::getStationCode,paramOrder.getLineCode())//工位 .eq(OmProductionOrdeInfo::getProductCode,materialCode));//产品类型 if (CollUtil.isNotEmpty(orderList)){ Long id = orderList.get(0).getId(); String productNum = orderList.get(0).getProductNum();//模组码 String orderNum = orderList.get(0).getWorkOrderNo(); paramProductNum = productNum; //下发产品模组码 miloService.writeToOpcUa(ReadWriteEntity.builder().identifier("MOZU1." + paramOrder.getLineCode() + ".WorkOrderNumber").value(orderNum).build()); miloService.writeToOpcUa(ReadWriteEntity.builder().identifier("MOZU1." + paramOrder.getLineCode() + ".ModuleCode").value(productNum).build()); }else{ OmProductionOrdeInfo lastOrder = omProductionOrdeInfoService.getLastOrder(); String orderJsonString = RestfulService.getProductionWorkOrderRequest(lastOrder.getProductNum(), "M1OP100",materialCode); JSONObject jsonObject = new JSONObject(orderJsonString); // 从JSONObject中获取data对象 JSONObject dataObject = jsonObject.getJSONObject("data"); String code = jsonObject.getStr("code"); // 判断接单是否成功 if(code.equals("success")){ logger.info("请求工厂MES工单:入参pack{}出参pack:{}",paramProductNum,dataObject.getStr("productNum")); List check = omProductionOrdeInfoService.list(new LambdaQueryWrapper().eq(OmProductionOrdeInfo::getProductNum,dataObject.getStr("productNum"))); if(check.isEmpty()){ try { log.info("请求工厂MES工单:入参pack{}出参pack:{}", paramProductNum, dataObject.getStr("productNum")); OmProductionOrdeInfo omProductionOrdeInfo = new OmProductionOrdeInfo(); omProductionOrdeInfo.setWorkOrderNo(dataObject.getStr("productionOrderNum")); omProductionOrdeInfo.setProductNum(dataObject.getStr("productNum")); omProductionOrdeInfo.setStationCode(paramOrder.getLineCode());//工位 omProductionOrdeInfo.setProductCode(dataObject.getStr("materialCode")); omProductionOrdeInfo.setPlanQty(Long.valueOf(dataObject.getStr("plannedQuantity"))); omProductionOrdeInfo.setOnlineCompletionMark("0"); omProductionOrdeInfo.setSfResult("0"); omProductionOrdeInfo.setProductModel(dataObject.getStr("model")); omProductionOrdeInfo.setCreateTime(new Date()); omProductionOrdeInfo.setCreateUser("工厂MES"); omProductionOrdeInfoService.save(omProductionOrdeInfo); paramProductNum = dataObject.getStr("productNum"); //写PLC miloService.writeToOpcUa(ReadWriteEntity.builder().identifier("MOZU1." + paramOrder.getLineCode() + ".WorkOrderNumber").value(dataObject.getStr("productionOrderNum")).build()); miloService.writeToOpcUa(ReadWriteEntity.builder().identifier("MOZU1." + paramOrder.getLineCode() + ".ModuleCode").value(dataObject.getStr("productNum")).build()); } catch (Exception e) { throw new RuntimeException(e); } }else{ return AjaxResult.error("工单重复,请重新接收"); } }else { return AjaxResult.error("接单失败,请联系管理员"); } } return AjaxResult.success(paramProductNum); } @GetMapping(value = "/jieBang/{id}") public AjaxResult jieBang(@PathVariable("id") Long id) { OmProductionOrdeInfo byId = omProductionOrdeInfoService.getById(id); byId.setTrolleyYard(""); return success(omProductionOrdeInfoService.saveOrUpdate(byId)); } /** * 获取生产工单详细信息 */ @PreAuthorize("@ss.hasPermi('om:productionOrde:query')") @GetMapping(value = "/{id}") public AjaxResult getInfo(@PathVariable("id") Long id) { return success(omProductionOrdeInfoService.selectOmProductionOrdeInfoById(id)); } /** * 新增生产工单 */ @PreAuthorize("@ss.hasPermi('om:productionOrde:add')") @Log(title = "生产工单", businessType = BusinessType.INSERT) @PostMapping public AjaxResult add(@RequestBody OmProductionOrdeInfo omProductionOrdeInfo) { return toAjax(omProductionOrdeInfoService.insertOmProductionOrdeInfo(omProductionOrdeInfo)); } /** * 修改生产工单 */ @PreAuthorize("@ss.hasPermi('om:productionOrde:edit')") @Log(title = "生产工单", businessType = BusinessType.UPDATE) @PutMapping public AjaxResult edit(@RequestBody OmProductionOrdeInfo omProductionOrdeInfo) { return toAjax(omProductionOrdeInfoService.updateOmProductionOrdeInfo(omProductionOrdeInfo)); } /** * 删除生产工单 */ @PreAuthorize("@ss.hasPermi('om:productionOrde:remove')") @Log(title = "生产工单", businessType = BusinessType.DELETE) @DeleteMapping("/{ids}") public AjaxResult remove(@PathVariable Long[] ids) { return toAjax(omProductionOrdeInfoService.deleteOmProductionOrdeInfoByIds(ids)); } /** * table列上移下移 */ @Log(title = "生产工单", businessType = BusinessType.DELETE) @GetMapping("/upDownMove") public AjaxResult upDownMove(OmProductionOrdeInfo omProductionOrdeInfo) { return omProductionOrdeInfoService.upDownMove(omProductionOrdeInfo); } @PostMapping("/importData") public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception { ExcelUtil util = new ExcelUtil(OmProductionOrdeInfo.class); List ordeInfo = util.importExcel(file.getInputStream()); for (OmProductionOrdeInfo omProductionOrdeInfo : ordeInfo) { omProductionOrdeInfo.setCreateTime(new Date()); omProductionOrdeInfo.setCreateBy("工厂MES"); } omProductionOrdeInfoService.overrideSaveBatch(ordeInfo); return AjaxResult.success(); } @PostMapping("/importTemplate") public void importTemplate(HttpServletResponse response) { ExcelUtil util = new ExcelUtil(OmProductionOrdeInfoExcelImport.class); util.importTemplateExcel(response, "订单数据"); } @PostMapping("/trolleyYardBinDing") public AjaxResult trolleyYardBinDing(@RequestBody OmProductionOrdeInfo omProductionOrdeInfo) { return omProductionOrdeInfoService.trolleyYardBinDing(omProductionOrdeInfo); } @PostMapping("/getCarCodeSize") public AjaxResult getCarCodeSize(@RequestBody OmProductionOrdeInfo omProductionOrdeInfo) { return omProductionOrdeInfoService.getCarCodeSize(omProductionOrdeInfo); } @PostMapping("/findBytrolleyYardGetOne") public AjaxResult findBytrolleyYardGetOne(@RequestBody OmProductionOrdeInfo omProductionOrdeInfo) { return omProductionOrdeInfoService.findBytrolleyYardGetOne(omProductionOrdeInfo); } @GetMapping("/workReportingByStation/{id}/{stationCode}") public AjaxResult workReportingByStation(@PathVariable("id") Long id, @PathVariable("stationCode") String stationCode) { OmProductionOrdeInfo omProductionOrdeInfo = new OmProductionOrdeInfo(); omProductionOrdeInfo.setId(id); omProductionOrdeInfo.setStationCode(stationCode); return omProductionOrdeInfoService.workReportingByStation(omProductionOrdeInfo); } }