admin
2024-08-04 517d1ae8b37b25228a771556cdf46b422b8b5bf5
jcdm-main/src/main/java/com/jcdm/main/om/productionOrde/controller/OmProductionOrdeInfoController.java
@@ -3,8 +3,11 @@
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;
@@ -12,11 +15,15 @@
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;
@@ -54,6 +61,24 @@
    @Autowired
    private IOmProductionOrdeInfoService omProductionOrdeInfoService;
    @Autowired
    private MiloService miloService;
    /**
     * 根据总成码查询工单
     */
    @GetMapping("/getProductionOrdeOneBySfcCode")
    public AjaxResult getProductionOrdeOneBySfcCode(OmProductionOrdeInfo omProductionOrdeInfo)
    {
        OmProductionOrdeInfo ordeInfo = omProductionOrdeInfoService.getOne(new LambdaQueryWrapper<OmProductionOrdeInfo>()
                .eq(OmProductionOrdeInfo::getProductNum, omProductionOrdeInfo.getProductNum()));
        if(ObjectUtil.isNotNull(ordeInfo)){
            return AjaxResult.success(ordeInfo);
        }else {
            return AjaxResult.error("未查询到工单!");
        }
    }
    /**
     * 查询生产工单列表
@@ -112,45 +137,76 @@
        util.exportExcel(response, list, "生产工单数据");
    }
    @GetMapping("/receivingWorkOrders")
    public AjaxResult receivingWorkOrders()
    {
    @GetMapping("/mozuReceivingWorkOrders")
    public AjaxResult mozuReceivingWorkOrders(OmProductionOrdeInfo paramOrder) throws Exception {
        String paramProductNum = "";
        // 查询最新的工单信息
        List<OmProductionOrdeInfo> list = omProductionOrdeInfoService.list(new LambdaQueryWrapper<OmProductionOrdeInfo>().orderByAsc(OmProductionOrdeInfo::getCreateTime));
        if(list.size() > 0){
            paramProductNum = list.get(list.size()-1).getProductNum();
        Object productTypeObjcet = miloService.readFromOpcUa("MOZU1." + paramOrder.getLineCode() + ".ProductType").getValue();//产品类型
        if (ObjectUtil.isNull(productTypeObjcet)) {
            return AjaxResult.error("接单失败,PLC未传输生产类型,请联系管理员!");
        }
        String orderJsonString = RestfulService.getProductionWorkOrderRequest(paramProductNum, "OP230");
        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.size() == 0){
                OmProductionOrdeInfo omProductionOrdeInfo = new OmProductionOrdeInfo();
                omProductionOrdeInfo.setWorkOrderNo(dataObject.getStr("productionOrderNum"));
                omProductionOrdeInfo.setProductNum(dataObject.getStr("productNum"));
                omProductionOrdeInfo.setStationCode(dataObject.getStr("stationCode"));
                omProductionOrdeInfo.setMaterialCode(dataObject.getStr("materialCode"));
                omProductionOrdeInfo.setOnlineCompletionMark("0");
                omProductionOrdeInfo.setSfResult("0");
                if(dataObject.getStr("model").equals("PE01A")){
                    omProductionOrdeInfo.setProductCode("1P102S");
                }else {
                    omProductionOrdeInfo.setProductCode(dataObject.getStr("model"));
        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("工单重复,请重新接收");
                }
                omProductionOrdeInfo.setCreateTime(new Date());
                omProductionOrdeInfo.setCreateUser("工厂MES");
                omProductionOrdeInfoService.save(omProductionOrdeInfo);
            }else {
                return AjaxResult.error("接单失败,请联系管理员");
            }
        }else {
            return AjaxResult.error("接单失败,请联系管理员");
        }
        return AjaxResult.success(dataObject.getStr("productNum"));
        return AjaxResult.success(paramProductNum);
    }
    @GetMapping(value = "/jieBang/{id}")