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<OmProductionOrdeInfo> list = omProductionOrdeInfoService.list(new LambdaQueryWrapper<OmProductionOrdeInfo>().eq(OmProductionOrdeInfo::getWorkOrderNo, "W_202403120001"));
|
List<OmProductionOrdeInfo> list = omProductionOrdeInfoService.selectOmProductionOrdeInfoList(omProductionOrdeInfo);
|
return getDataTable(list);
|
}
|
|
/**
|
* 查询生产工单列表
|
*/
|
@GetMapping("/listLoopLine")
|
public TableDataInfo listLoopLine(OmProductionOrdeInfo omProductionOrdeInfo)
|
{
|
startPage();
|
List<OmProductionOrdeInfo> list = omProductionOrdeInfoService.listLoopLine(omProductionOrdeInfo);
|
return getDataTable(list);
|
}
|
|
@GetMapping("/checkCarCode")
|
public AjaxResult checkCarCode(OmProductionOrdeInfo omProductionOrdeInfo)
|
{
|
Integer i = 0;
|
List<OmProductionOrdeInfo> list = omProductionOrdeInfoService.list(new LambdaQueryWrapper<OmProductionOrdeInfo>().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<OmProductionOrdeInfo> list = omProductionOrdeInfoService.list(new LambdaQueryWrapper<OmProductionOrdeInfo>().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<OmProductionOrdeInfo> list = omProductionOrdeInfoService.list(new LambdaQueryWrapper<OmProductionOrdeInfo>().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<OmProductionOrdeInfo> list = omProductionOrdeInfoService.selectOmProductionOrdeInfoList(omProductionOrdeInfo);
|
ExcelUtil<OmProductionOrdeInfo> util = new ExcelUtil<OmProductionOrdeInfo>(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<OmProductionOrdeInfo> orderList = omProductionOrdeInfoService.list(new LambdaQueryWrapper<OmProductionOrdeInfo>()
|
.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<OmProductionOrdeInfo> check = omProductionOrdeInfoService.list(new LambdaQueryWrapper<OmProductionOrdeInfo>().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<OmProductionOrdeInfo> util = new ExcelUtil<OmProductionOrdeInfo>(OmProductionOrdeInfo.class);
|
List<OmProductionOrdeInfo> 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<OmProductionOrdeInfoExcelImport> util = new ExcelUtil<OmProductionOrdeInfoExcelImport>(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);
|
}
|
}
|