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<Integer> logIdList = (List<Integer>) 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<IfsLog>().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.<ProductMainIfsReport>lambdaQuery().eq(ProductMainIfsReport::getProductMainId, productMainId));
|
} else if (ifsLog.getMesParams().contains("qualityReportId")) {
|
Long qualityReportId = JSONObject.parseObject(ifsLog.getMesParams()).getLongValue("qualityReportId");
|
qualityMainIfsReportMapper.delete(Wrappers.<QualityMainIfsReport>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<ManufacturingOrderMatIssue> manufacturingOrderMatIssues = manufacturingOrderMatIssueMapper.selectList(
|
Wrappers.<ManufacturingOrderMatIssue>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.<ManufacturingOrderMatIssue>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<ProductMainIfsReport> productMainIfsReports = productMainIfsReportMapper.selectList(Wrappers.<ProductMainIfsReport>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<QualityMainIfsReport> qualityMainIfsReports = qualityMainIfsReportMapper.selectList(Wrappers.<QualityMainIfsReport>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);
|
}
|
}
|