package com.chinaztt.mes.production.util; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.BooleanUtil; import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.chinaztt.ifs.api.feign.IfsFeignClient; import com.chinaztt.mes.basic.entity.IfsLog; import com.chinaztt.mes.basic.mapper.IfsLogMapper; import com.chinaztt.mes.plan.entity.ManufacturingOrder; import com.chinaztt.mes.plan.entity.ManufacturingOrderMatIssue; import com.chinaztt.mes.plan.mapper.ManufacturingOrderMatIssueMapper; import com.chinaztt.mes.plan.service.ManufacturingOrderService; import com.chinaztt.mes.production.entity.ProductMainIfsReport; import com.chinaztt.mes.production.mapper.ProductMainIfsReportMapper; import com.chinaztt.mes.quality.entity.QualityMainIfsReport; import com.chinaztt.mes.quality.mapper.QualityMainIfsReportMapper; import com.chinaztt.mes.warehouse.util.StockUtils; import com.chinaztt.ztt.common.core.util.R; import lombok.AllArgsConstructor; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import java.math.BigDecimal; import java.util.List; import java.util.UUID; /** * @Description: * @Author: shz * @Date: 2022/7/29 15:34 */ @AllArgsConstructor @Component public class IfsCommonUtils { private IfsFeignClient ifsFeignClient; private IfsLogMapper ifsLogMapper; private StockUtils stockUtils; private ProductMainIfsReportMapper productMainIfsReportMapper; private ManufacturingOrderService manufacturingOrderService; private ManufacturingOrderMatIssueMapper manufacturingOrderMatIssueMapper; private QualityMainIfsReportMapper qualityMainIfsReportMapper; public static final String IMPORT_SO_OPER_REPORT_STD = "IMPORT_SO_OPER_REPORT_STD"; public static final String IMPORT_SO_OPER_UNREPORT_STD = "IMPORT_SO_OPER_UNREPORT_STD"; /** * 车间订单及物料工序新增、更新接口 */ public static final String IMPORT_SO_SMA_SOPER_STD = "IMPORT_SO_SMA_SOPER_STD"; /** * 车间订单状态修改 */ public static final String MODIFY_SO_STATE_STD = "MODIFY_SO_STATE_STD"; /** * 车间订单预处理 */ public static final String MODIFY_SO_PRE_CLOSE_STD = "MODIFY_SO_PRE_CLOSE_STD"; /** * 车间订单发料 外协 */ public static final String IMPORT_SO_MATERIAL_ISSUE_STD = "IMPORT_SO_MATERIAL_ISSUE_STD"; /** * 车间订单取消发料 外协 */ public static final String IMPORT_SO_MATERIAL_UNISSUE_STD = "IMPORT_SO_MATERIAL_UNISSUE_STD"; public R executeCaches() { RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(new MockHttpServletRequest())); R r = ifsFeignClient.queryAllIfsCache(); if (r.getCode() == 0) { List logIdList = (List) r.getData(); if (!logIdList.isEmpty()) { for (int i = 0; i < logIdList.size(); i++) { Integer logId = logIdList.get(i); IfsLog ifsLog = ifsLogMapper.selectById(logId); if (BooleanUtil.isTrue(ifsLog.getInterruptFlag())) { break; } if(ifsLog.getActive()) { // 判断请求是否为需要更新参数 updateParams(ifsLog); // 请求ifs R result = ifsFeignClient.updateIfsCacheStatus(ifsLog.getId()); if (result.getCode() == 0) { JSONObject response = (JSONObject) JSON.toJSON(result.getData()); // 判断结果是否需要缓存或处理 updateResults(ifsLog, response); } else { updateNextInterruptFlag(logIdList.get(i + 1)); return result; } } } } } else { return r; } return R.ok(); } private void updateNextInterruptFlag(Integer id) { ifsLogMapper.update(null, new UpdateWrapper().set("interrupt_flag", Boolean.TRUE).eq("id", id)); } public R executeCachesById(Long logId) { IfsLog ifsLog = ifsLogMapper.selectById(logId); if(ifsLog!=null) { if(ifsLog.getActive()) { // 判断请求是否为需要更新参数, updateParams(ifsLog); // 请求ifs R result = ifsFeignClient.updateIfsCacheStatus(ifsLog.getId()); if (result.getCode() == 0) { JSONObject response = (JSONObject) JSON.toJSON(result.getData()); // 判断结果是否需要缓存或处理 updateResults(ifsLog, response); } else { return result; } } } return R.ok(); } private void updateResults(IfsLog ifsLog, JSONObject result) { switch (ifsLog.getProcedureName()) { // 工序报工 case IMPORT_SO_OPER_REPORT_STD: if (ifsLog.getMesParams().contains("productMainId")) { updateReportResult(result, JSONObject.parseObject(ifsLog.getMesParams())); } else if (ifsLog.getMesParams().contains("qualityReportId")) { updateTestReportResult(result, JSONObject.parseObject(ifsLog.getMesParams())); } break; // 工序报工取消 case IMPORT_SO_OPER_UNREPORT_STD: // 删除报工取消id if (ifsLog.getMesParams().contains("productMainId")) { Long productMainId = JSONObject.parseObject(ifsLog.getMesParams()).getLongValue("productMainId"); productMainIfsReportMapper.delete(Wrappers.lambdaQuery().eq(ProductMainIfsReport::getProductMainId, productMainId)); } else if (ifsLog.getMesParams().contains("qualityReportId")) { Long qualityReportId = JSONObject.parseObject(ifsLog.getMesParams()).getLongValue("qualityReportId"); qualityMainIfsReportMapper.delete(Wrappers.lambdaQuery().eq(QualityMainIfsReport::getQualityReportId, qualityReportId)); } break; //车间订单工序更新 case IMPORT_SO_SMA_SOPER_STD: manufacturingOrderService.moIfsResult(result.getJSONArray("LIST_INFO")); break; //车间订单发料 case IMPORT_SO_MATERIAL_ISSUE_STD: updateManufacturingOrderMatIssuesResult(ifsLog); break; //车间订单外协发料取消 case IMPORT_SO_MATERIAL_UNISSUE_STD: updateManufacturingOrderMatIssuesResultCancel(ifsLog); break; } } private void updateParams(IfsLog ifsLog) { switch (ifsLog.getProcedureName()) { // 报工取消 case IMPORT_SO_OPER_UNREPORT_STD: if (ifsLog.getMesParams().contains("productMainId")) { updateUnReportParams(ifsLog); } else if (ifsLog.getMesParams().contains("qualityReportId")) { updateUnTestReportParams(ifsLog); } break; // 车间订单状态修改 case MODIFY_SO_STATE_STD: updateManufacturingOrderState(ifsLog); break; // 车间订单预处理 case MODIFY_SO_PRE_CLOSE_STD: updateManufacturingOrderState(ifsLog); break; // 车间订单取消发料 case IMPORT_SO_MATERIAL_UNISSUE_STD: updateManufacturingOrderMatIssues(ifsLog); break; // 车间订单发料 case IMPORT_SO_MATERIAL_ISSUE_STD: updateManufacturingOrderMatIssues(ifsLog); break; } } /** * 车间订单发料和取消发料 * * @param ifsLog */ private void updateManufacturingOrderMatIssues(IfsLog ifsLog) { JSONObject mesParams = JSONObject.parseObject(ifsLog.getMesParams()); Long manufacturingOrderId = mesParams.getLongValue("manufacturingOrderId"); JSONArray manufacturingOrderIssueArray = mesParams.getJSONArray("manufacturingOrderMatIssueArray"); String sysmodel = mesParams.getString("SYSMODEL"); ManufacturingOrder manufacturingOrder = manufacturingOrderService.selectById(manufacturingOrderId); JSONObject params = new JSONObject().fluentPut("RECORD_ID", UUID.randomUUID().toString()).fluentPut("SYSCODE", "LMES").fluentPut("SYSMODEL", sysmodel); JSONArray infoArray = new JSONArray(); for (Object object : manufacturingOrderIssueArray) { JSONObject jsonObjectIssue = JSONObject.parseObject(object.toString()); jsonObjectIssue.put("ORDER_NO", manufacturingOrder.getIfsOrderNo()); //订单号 jsonObjectIssue.put("RELEASE_NO", manufacturingOrder.getIfsReleaseNo()); //下达号 jsonObjectIssue.put("SEQUENCE_NO", manufacturingOrder.getIfsSequenceNo()); //序列号 infoArray.add(jsonObjectIssue); } params.put("BATCH_INFO", infoArray); // 更新缓存参数 IfsLog update = new IfsLog(); update.setId(ifsLog.getId()); update.setInAttr(params.toJSONString()); ifsLogMapper.updateById(update); } /** * 外协发料后进行移库 * * @param ifsLog */ private void updateManufacturingOrderMatIssuesResult(IfsLog ifsLog) { JSONObject mesParams = JSONObject.parseObject(ifsLog.getMesParams()); JSONArray jsonArray = mesParams.getJSONArray("manufacturingOrderMatIssuesList"); Long manufacturingOrderId = mesParams.getLongValue("manufacturingOrderId"); ManufacturingOrder manufacturingOrder = manufacturingOrderService.selectById(manufacturingOrderId); for (Object object : jsonArray) { ManufacturingOrderMatIssue manufacturingOrderMatIssue = JSONUtil.toBean(object.toString(), ManufacturingOrderMatIssue.class); if (manufacturingOrderMatIssue.getStockId() != null) { //移库 stockUtils.updateById(manufacturingOrderMatIssue.getStockId(), manufacturingOrderMatIssue.getQtyIssue().negate(), BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, manufacturingOrder.getMoNo(), "MOMATISSUE"); } manufacturingOrderMatIssue.setMoId(manufacturingOrderId); manufacturingOrderMatIssueMapper.insert(manufacturingOrderMatIssue); } } /** * 外协取消发料后进行移库 * * @param ifsLog */ private void updateManufacturingOrderMatIssuesResultCancel(IfsLog ifsLog) { JSONObject mesParams = JSONObject.parseObject(ifsLog.getMesParams()); JSONArray jsonArray = mesParams.getJSONArray("manufacturingOrderMatIssuesList"); Long manufacturingOrderId = mesParams.getLongValue("manufacturingOrderId"); ManufacturingOrder manufacturingOrder = manufacturingOrderService.selectById(manufacturingOrderId); List manufacturingOrderMatIssues = manufacturingOrderMatIssueMapper.selectList( Wrappers.lambdaQuery().eq(ManufacturingOrderMatIssue::getMoId, manufacturingOrderId) ); manufacturingOrderMatIssues.forEach(manufacturingOrderMatIssue -> { if (manufacturingOrderMatIssue.getStockId() != null) { stockUtils.updateById(manufacturingOrderMatIssue.getStockId(), manufacturingOrderMatIssue.getQtyIssue(), BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, manufacturingOrder.getMoNo(), "MOMATUNISSUE"); } }); manufacturingOrderMatIssueMapper.delete(Wrappers.lambdaQuery().eq(ManufacturingOrderMatIssue::getMoId, manufacturingOrderId)); } /** * 车间订单状态修改和预处理参数参数拼接 * * @param ifsLog */ private void updateManufacturingOrderState(IfsLog ifsLog) { JSONObject mesParams = JSONObject.parseObject(ifsLog.getMesParams()); JSONArray manufacturingOrderArr = mesParams.getJSONArray("manufacturingOrderArr"); String sysmodel = mesParams.getString("SYSMODEL"); JSONObject params = new JSONObject() .fluentPut("RECORD_ID", UUID.randomUUID().toString()) .fluentPut("SYSCODE", "LMES") .fluentPut("SYSMODEL", sysmodel); JSONArray jsonArray = new JSONArray(); for (int i = 0; i < manufacturingOrderArr.size(); i++) { //解析数据 JSONObject jsonObject = manufacturingOrderArr.getJSONObject(i); //查询车间订单 ManufacturingOrder manufacturingOrder = manufacturingOrderService.selectById(jsonObject.getLong("moId")); jsonObject.put("ORDER_NO", manufacturingOrder.getIfsOrderNo());//订单编号 jsonObject.put("RELEASE_NO", manufacturingOrder.getIfsReleaseNo());//下达号 jsonObject.put("SEQUENCE_NO", manufacturingOrder.getIfsSequenceNo());//序列号 jsonObject.remove("moId"); jsonArray.add(jsonObject); } params.put("BATCH_INFO", jsonArray); // 更新缓存参数 IfsLog update = new IfsLog(); update.setId(ifsLog.getId()); update.setInAttr(params.toJSONString()); ifsLogMapper.updateById(update); } /** * 更新取消报工请求ifs参数 * * @param ifsLog */ private void updateUnReportParams(IfsLog ifsLog) { Long productMainId = JSONObject.parseObject(ifsLog.getMesParams()).getLongValue("productMainId"); List productMainIfsReports = productMainIfsReportMapper.selectList(Wrappers.lambdaQuery().eq(ProductMainIfsReport::getProductMainId, productMainId)); JSONObject params = new JSONObject(); params.put("RECORD_ID", UUID.randomUUID().toString().replace("-", "")); params.put("SYSCODE", "L-MES"); params.put("SYSMODEL", "报工单取消工序报工"); JSONArray jsonArray = new JSONArray(); for (ProductMainIfsReport productMainIfsReport : productMainIfsReports) { JSONObject opfeed = new JSONObject(); opfeed.put("TRANSACTION_ID", productMainIfsReport.getIfsOpfeedId()); JSONObject labor = new JSONObject(); labor.put("TRANSACTION_ID", productMainIfsReport.getIfsLaborId()); jsonArray.add(opfeed); jsonArray.add(labor); } params.put("BATCH_INFO", jsonArray); // 更新缓存参数 IfsLog update = new IfsLog(); update.setId(ifsLog.getId()); update.setInAttr(params.toJSONString()); ifsLogMapper.updateById(update); } /** * 更新ifs工序报工返回的报工id * * @param data * @param mesParams */ private void updateReportResult(JSONObject data, JSONObject mesParams) { // 保存ifs工序报告id和人工id,用于取消 JSONArray reportInfosList = data.getJSONArray("REPORT_INFOS"); for (int i = 0; i < reportInfosList.size(); i++) { JSONArray reportInfo = reportInfosList.getJSONObject(i).getJSONArray("REPORT_INFO"); if (CollectionUtil.isNotEmpty(reportInfo)) { Long ifsOpfeedId = null; Long ifsLaborId = null; for (int j = 0; j < reportInfo.size(); j++) { if (reportInfo.getJSONObject(j).getString("TRANSACTION_CODE").equals("OPFEED")) { ifsOpfeedId = reportInfo.getJSONObject(j).getLongValue("TRANSACTION_ID"); } else { ifsLaborId = reportInfo.getJSONObject(j).getLongValue("TRANSACTION_ID"); } } ProductMainIfsReport productMainIfsReport = new ProductMainIfsReport(); productMainIfsReport.setProductMainId(mesParams.getLongValue("productMainId")); productMainIfsReport.setIfsOpfeedId(ifsOpfeedId); productMainIfsReport.setIfsLaborId(ifsLaborId); productMainIfsReportMapper.insert(productMainIfsReport); } } } /** * 更新ifs工序报工返回的报工id(检测汇报) * * @param data * @param mesParams */ private void updateTestReportResult(JSONObject data, JSONObject mesParams) { // 保存ifs工序报告id和人工id,用于取消 JSONArray reportInfosList = data.getJSONArray("REPORT_INFOS"); for (int i = 0; i < reportInfosList.size(); i++) { JSONArray reportInfo = reportInfosList.getJSONObject(i).getJSONArray("REPORT_INFO"); if (CollectionUtil.isNotEmpty(reportInfo)) { Long ifsOpfeedId = null; Long ifsLaborId = null; for (int j = 0; j < reportInfo.size(); j++) { if (reportInfo.getJSONObject(j).getString("TRANSACTION_CODE").equals("OPFEED")) { ifsOpfeedId = reportInfo.getJSONObject(j).getLongValue("TRANSACTION_ID"); } else { ifsLaborId = reportInfo.getJSONObject(j).getLongValue("TRANSACTION_ID"); } } QualityMainIfsReport qualityMainIfsReport = new QualityMainIfsReport(); qualityMainIfsReport.setQualityReportId(mesParams.getLongValue("qualityReportId"));//检测汇报id qualityMainIfsReport.setIfsOpfeedId(ifsOpfeedId); qualityMainIfsReport.setIfsLaborId(ifsLaborId); qualityMainIfsReportMapper.insert(qualityMainIfsReport); } } } /** * 更新取消报工请求ifs参数(检测汇报) * * @param ifsLog */ private void updateUnTestReportParams(IfsLog ifsLog) { Long qualityReportId = JSONObject.parseObject(ifsLog.getMesParams()).getLongValue("qualityReportId"); List qualityMainIfsReports = qualityMainIfsReportMapper.selectList(Wrappers.lambdaQuery().eq(QualityMainIfsReport::getQualityReportId, qualityReportId)); JSONObject params = new JSONObject(); params.put("RECORD_ID", UUID.randomUUID().toString().replace("-", "")); params.put("SYSCODE", "L-MES"); params.put("SYSMODEL", "检测汇报取消工序报工"); JSONArray jsonArray = new JSONArray(); for (QualityMainIfsReport qualityMainIfsReport : qualityMainIfsReports) { JSONObject opfeed = new JSONObject(); opfeed.put("TRANSACTION_ID", qualityMainIfsReport.getIfsOpfeedId()); JSONObject labor = new JSONObject(); labor.put("TRANSACTION_ID", qualityMainIfsReport.getIfsLaborId()); jsonArray.add(opfeed); jsonArray.add(labor); } params.put("BATCH_INFO", jsonArray); // 更新缓存参数 IfsLog update = new IfsLog(); update.setId(ifsLog.getId()); update.setInAttr(params.toJSONString()); ifsLogMapper.updateById(update); } }