深汕工单验证

uat-temp-wj-2502060000-chongqing-step
王杰 4 months ago
parent 68769974ee
commit 1a456976b1

@ -2,8 +2,8 @@ package cn.estsh.i3plus.ext.mes.pcn.api.job;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderCalcQtyRecord;
import cn.estsh.i3plus.pojo.mes.bean.offline.MesWorkOrderOffline;
import cn.estsh.impp.framework.boot.exception.ImppBusiException;
import io.swagger.annotations.ApiOperation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
@ -11,13 +11,18 @@ import java.util.List;
public interface IMesWorkOrderCalcQtyRestoreDispatchService {
@ApiOperation(value = "查询生产工单计数记录表")
List<MesWorkOrderCalcQtyRecord> getWorkOrderCalcQtyRecordList(String organizeCode, Integer qty);
@ApiOperation(value = "查询工单")
@Transactional(propagation = Propagation.NOT_SUPPORTED)
MesWorkOrder getWorkOrderDb(String organizeCode, Long workOrderId);
@ApiOperation(value = "补录生产工单计数JOB修改数据")
@Transactional(propagation = Propagation.REQUIRES_NEW, noRollbackFor = {ImppBusiException.class, Exception.class})
void doRestoreWorkOrderCalcQty(MesWorkOrderOffline workOrderOffline, Boolean result);
void doRestoreWorkOrderCalcQty(String organizeCode, MesWorkOrder workOrder, List<MesWorkOrderCalcQtyRecord> value);
@ApiOperation(value = "修改记录状态")
void saveWorkOrderCalcQtyRecord(String organizeCode, List<Long> idList, Integer dealStatus, String remark);
}

@ -1,13 +1,12 @@
package cn.estsh.i3plus.ext.mes.pcn.api.job;
import io.swagger.annotations.ApiOperation;
import java.util.Map;
public interface IMesWorkOrderCalcQtyRestoreService {
/**
* 线JOB
* @param paramMap
*/
@ApiOperation(value = "补录离线生产工单数据JOB")
void doRestoreWorkOrderCalcQty(Map<String, String> paramMap);
}

@ -2,7 +2,6 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.schedulejob;
import cn.estsh.i3plus.ext.mes.pcn.api.job.IMesWorkOrderCalcQtyRestoreService;
import cn.estsh.i3plus.ext.mes.pcn.api.job.IMesWorkOrderOfflineRestoreService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.impp.framework.boot.init.ApplicationProperties;
import com.alibaba.fastjson.JSONObject;

@ -1,35 +1,28 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.job;
import cn.estsh.i3plus.ext.mes.pcn.api.job.IMesWorkOrderCalcQtyRestoreDispatchService;
import cn.estsh.i3plus.ext.mes.pcn.api.job.IMesWorkOrderOfflineRestoreDispatchService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesProductionRecordOfflineModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.platform.common.tool.MathOperation;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.codemaker.SnowflakeIdMaker;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.*;
import cn.estsh.i3plus.pojo.mes.bean.offline.MesWorkOrderAssemblyOffline;
import cn.estsh.i3plus.pojo.mes.bean.offline.MesWorkOrderOffline;
import cn.estsh.i3plus.pojo.mes.bean.offline.MesWorkOrderPartOffline;
import cn.estsh.i3plus.pojo.mes.repository.*;
import cn.estsh.i3plus.pojo.mes.repository.offline.MesWorkOrderAssemblyOfflineRepository;
import cn.estsh.i3plus.pojo.mes.repository.offline.MesWorkOrderOfflineRepository;
import cn.estsh.i3plus.pojo.mes.repository.offline.MesWorkOrderPartOfflineRepository;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderCalcQtyRecord;
import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderCalcQtyRecordRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderRepository;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.stream.Collectors;
@Slf4j
@ -58,10 +51,138 @@ public class MesWorkOrderCalcQtyRestoreDispatchService implements IMesWorkOrderC
}
@Override
public void doRestoreWorkOrderCalcQty(MesWorkOrderOffline workOrderOffline, Boolean result) {
public void doRestoreWorkOrderCalcQty(String organizeCode, MesWorkOrder workOrder, List<MesWorkOrderCalcQtyRecord> workOrderCalcQtyRecordList) {
}
//搜集记录ID集合
List<Long> idList = workOrderCalcQtyRecordList.stream().filter(o -> null != o).map(MesWorkOrderCalcQtyRecord::getId).collect(Collectors.toList());
if (null == workOrder) {
//修改记录状态
saveWorkOrderCalcQtyRecord(organizeCode, idList, MesExtEnumUtil.MES_LOG_DEAL_STATUS.DEAL_FAILURE.getValue(), "工单信息不存在");
log.info("补录生产工单计数JOB --- 补录: {} --- ID: {} --- END --- {} {} --- MesWorkOrderCalcQtyRecord: {} ---",
workOrderCalcQtyRecordList.get(0).getWorkOrderNo(), workOrderCalcQtyRecordList.get(0).getId(), MesExtEnumUtil.MES_LOG_DEAL_STATUS.DEAL_FAILURE.getDescription(), "工单信息不存在", idList.toString());
return;
}
//计数
Double completeQty = !StringUtils.isEmpty(workOrder.getCompleteQty()) ? workOrder.getCompleteQty() : new Double(MesPcnExtConstWords.ZERO);
Double suspiciousPartQty = !StringUtils.isEmpty(workOrder.getSuspiciousPartQty()) ? workOrder.getSuspiciousPartQty() : new Double(MesPcnExtConstWords.ZERO);
Double scrapPartQty = !StringUtils.isEmpty(workOrder.getScrapPartQty()) ? workOrder.getScrapPartQty() : new Double(MesPcnExtConstWords.ZERO);
for (MesWorkOrderCalcQtyRecord workOrderCalcQtyRecord : workOrderCalcQtyRecordList) {
if (null == workOrderCalcQtyRecord) continue;
if (!StringUtils.isEmpty(workOrderCalcQtyRecord.getCompleteQty())) completeQty = MathOperation.add(completeQty, workOrderCalcQtyRecord.getCompleteQty());
if (!StringUtils.isEmpty(workOrderCalcQtyRecord.getSuspiciousPartQty())) suspiciousPartQty = MathOperation.add(suspiciousPartQty, workOrderCalcQtyRecord.getSuspiciousPartQty());
if (!StringUtils.isEmpty(workOrderCalcQtyRecord.getScrapPartQty())) scrapPartQty = MathOperation.add(scrapPartQty, workOrderCalcQtyRecord.getScrapPartQty());
}
//未完成数
Double unCompleteQty = !StringUtils.isEmpty(workOrder.getUnCompleteQty()) ? workOrder.getUnCompleteQty() : workOrder.getQty();
unCompleteQty = MathOperation.compareTo(unCompleteQty, new Double(MesPcnExtConstWords.ZERO)) <= MesPcnExtConstWords.ZERO ? new Double(MesPcnExtConstWords.ZERO) : MathOperation.sub(workOrder.getQty(), completeQty);
if (MathOperation.compareTo(unCompleteQty, new Double(MesPcnExtConstWords.ZERO)) < MesPcnExtConstWords.ZERO) unCompleteQty = new Double(MesPcnExtConstWords.ZERO);
//状态
Integer workOrderStatus = workOrder.getWorkOrderStatus();
if (workOrderStatus.compareTo(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()) == MesPcnExtConstWords.ZERO || workOrderStatus.compareTo(MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()) == MesPcnExtConstWords.ZERO) {
if (MathOperation.compareTo(completeQty, workOrder.getQty()) >= MesPcnExtConstWords.ZERO) workOrderStatus = MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue();
else workOrderStatus = MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue();
}
//添加修改属性
Map<String, Object> propertyMap = new HashMap<>();
Map<String, Object> conditionMap = new HashMap<>();
conditionMap.put(MesPcnExtConstWords.ID, workOrder.getId());
conditionMap.put(MesPcnExtConstWords.ORGANIZE_CODE, organizeCode);
conditionMap.put(MesPcnExtConstWords.IS_DELETED, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
conditionMap.put(MesPcnExtConstWords.IS_VALID, CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
if (MathOperation.compareTo(workOrder.getCompleteQty(), completeQty) != MesPcnExtConstWords.ZERO) {
propertyMap.put(MesPcnExtConstWords.COMPLETE_QTY, completeQty);
conditionMap.put(MesPcnExtConstWords.COMPLETE_QTY, workOrder.getCompleteQty());
}
if (MathOperation.compareTo(workOrder.getSuspiciousPartQty(), suspiciousPartQty) != MesPcnExtConstWords.ZERO) {
propertyMap.put(MesPcnExtConstWords.SUSPICIOUS_PART_QTY, suspiciousPartQty);
conditionMap.put(MesPcnExtConstWords.SUSPICIOUS_PART_QTY, workOrder.getSuspiciousPartQty());
}
if (MathOperation.compareTo(workOrder.getScrapPartQty(), scrapPartQty) != MesPcnExtConstWords.ZERO) {
propertyMap.put(MesPcnExtConstWords.SCRAP_PART_QTY, scrapPartQty);
conditionMap.put(MesPcnExtConstWords.SCRAP_PART_QTY, workOrder.getScrapPartQty());
}
if (MathOperation.compareTo(workOrder.getUnCompleteQty(), unCompleteQty) != MesPcnExtConstWords.ZERO) {
propertyMap.put(MesPcnExtConstWords.UN_COMPLETE_QTY, unCompleteQty);
conditionMap.put(MesPcnExtConstWords.UN_COMPLETE_QTY, workOrder.getUnCompleteQty());
}
if (workOrder.getWorkOrderStatus().compareTo(workOrderStatus) != MesPcnExtConstWords.ZERO) {
propertyMap.put(MesPcnExtConstWords.WORK_ORDER_STATUS, workOrderStatus);
conditionMap.put(MesPcnExtConstWords.WORK_ORDER_STATUS, workOrder.getWorkOrderStatus());
}
//当前没有任何修改
if (CollectionUtils.isEmpty(propertyMap)) {
//修改记录状态
saveWorkOrderCalcQtyRecord(organizeCode, idList, MesExtEnumUtil.MES_LOG_DEAL_STATUS.DEAL_SUCCESS.getValue(), "工单信息无变更");
log.info("补录生产工单计数JOB --- 补录: {} --- ID: {} --- END --- {} {} --- MesWorkOrderCalcQtyRecord: {} ---",
workOrder.getWorkOrderNo(), workOrder.getId(), MesExtEnumUtil.MES_LOG_DEAL_STATUS.DEAL_SUCCESS.getDescription(), "工单信息无变更", idList.toString());
return;
}
//添加常规字段判断是否需要修改
if (workOrder.getSystemSyncStatus().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) != 0) {
propertyMap.put(MesPcnExtConstWords.SYSTEM_SYNC_STATUS, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
conditionMap.put(MesPcnExtConstWords.SYSTEM_SYNC_STATUS, workOrder.getSystemSyncStatus());
}
if (!workOrder.getSystemSyncDatetime().equals(MesPcnExtConstWords.EMPTY)) propertyMap.put(MesPcnExtConstWords.SYSTEM_SYNC_DATE_TIME, MesPcnExtConstWords.EMPTY);
String userInfo = workOrderCalcQtyRecordList.get(workOrderCalcQtyRecordList.size() - MesPcnExtConstWords.ONE).getCreateUser();
if (!workOrder.getModifyUser().equals(userInfo)) propertyMap.put(MesPcnExtConstWords.MODIFY_USER, userInfo);
propertyMap.put(MesPcnExtConstWords.MODIFY_DATE_TIME, (new SimpleDateFormat(MesPcnExtConstWords.DATE_FORMAT_SSS)).format(new Date()));
conditionMap.put(MesPcnExtConstWords.MODIFY_DATE_TIME, workOrder.getModifyDatetime());
//修改值
String[] propertyName = new String[propertyMap.size()];
Object[] propertyValue = new Object[propertyMap.size()];
Integer index = 0;
for (Map.Entry<String, Object> innerEntry : propertyMap.entrySet()) {
if (null == innerEntry) continue;
propertyName[index] = innerEntry.getKey();
propertyValue[index] = innerEntry.getValue();
index ++;
}
//修改条件
String[] conditionName = new String[conditionMap.size()];
Object[] conditionValue = new Object[conditionMap.size()];
index = 0;
for (Map.Entry<String, Object> innerEntry : conditionMap.entrySet()) {
if (null == innerEntry) continue;
conditionName[index] = innerEntry.getKey();
conditionValue[index] = innerEntry.getValue();
index ++;
}
//当工单修改成功后, 再修改记录状态
if (workOrderRepository.updateByPropertiesNoSync(conditionName, conditionValue, propertyName, propertyValue) == 1) {
//修改记录状态
saveWorkOrderCalcQtyRecord(organizeCode, idList, MesExtEnumUtil.MES_LOG_DEAL_STATUS.DEAL_SUCCESS.getValue(), "工单信息已变更成功");
log.info("补录生产工单计数JOB --- 补录: {} --- ID: {} --- END --- conditionMap: {} --- propertyMap: {} --- {} {} --- MesWorkOrderCalcQtyRecord: {} ---",
workOrder.getWorkOrderNo(), workOrder.getId(), JSONObject.toJSONString(conditionMap), JSONObject.toJSONString(propertyMap),
MesExtEnumUtil.MES_LOG_DEAL_STATUS.DEAL_SUCCESS.getDescription(), "工单信息已变更成功", idList.toString());
}
}
//修改记录状态
@Override
public void saveWorkOrderCalcQtyRecord(String organizeCode, List<Long> idList, Integer dealStatus, String remark) {
String[] propertyName = new String[]{MesPcnExtConstWords.DEAL_STATUS, MesPcnExtConstWords.MODIFY_USER,
MesPcnExtConstWords.MODIFY_DATE_TIME, MesPcnExtConstWords.SYSTEM_SYNC_STATUS, MesPcnExtConstWords.REMARK};
Object[] propertyValue = new Object[]{dealStatus, MesPcnExtConstWords.JOB,
(new SimpleDateFormat(MesPcnExtConstWords.DATE_FORMAT_SSS)).format(new Date()), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), remark};
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getInPackList(idList, MesPcnExtConstWords.ID, packBean);
workOrderCalcQtyRecordRepository.updateByPropertiesNoSync(propertyName, propertyValue, packBean);
}
}

@ -3,14 +3,8 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.job;
import cn.estsh.i3plus.ext.mes.pcn.api.job.IMesWorkOrderCalcQtyRestoreDispatchService;
import cn.estsh.i3plus.ext.mes.pcn.api.job.IMesWorkOrderCalcQtyRestoreService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderCalcQtyRecord;
import cn.estsh.i3plus.pojo.mes.bean.offline.MesWorkOrderOffline;
import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderCalcQtyRecordRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderRepository;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -55,16 +49,17 @@ public class MesWorkOrderCalcQtyRestoreService implements IMesWorkOrderCalcQtyRe
//查询工单, 无事务查询
MesWorkOrder workOrder = workOrderCalcQtyRestoreDispatchService.getWorkOrderDb(organizeCode, entry.getValue().get(0).getPid());
if (null == workOrder) log.info("补录生产工单计数JOB --- 补录 {} START --- ID: {} 信息不存在 ---", entry.getKey(), entry.getValue().get(0).getPid());
else log.info("补录生产工单计数JOB --- 补录 {} START --- ID: {} --- ---", entry.getKey(), entry.getValue().get(0).getPid());
workOrderCalcQtyRestoreDispatchService.doRestoreWorkOrderCalcQty(organizeCode, workOrder, entry.getValue());
if (null == workOrder) log.info("补录生产工单计数JOB --- 补录: {} --- ID: {} --- START --- 信息不存在 ---", entry.getKey(), entry.getValue().get(0).getPid());
else log.info("补录生产工单计数JOB --- 补录: {} --- ID: {} --- START ---", entry.getKey(), entry.getValue().get(0).getPid());
try {
workOrderCalcQtyRestoreDispatchService.doRestoreWorkOrderCalcQty(organizeCode, workOrder, entry.getValue());
} catch (Exception e) {
log.info("补录生产工单计数JOB --- 补录: {} --- ID: {} --- EXCEPTION: {} ---", entry.getKey(), entry.getValue().get(0).getPid(), e.toString());
}
}
}
}

@ -14,6 +14,7 @@ import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
@ -165,4 +166,41 @@ public class MesTimeEfficientCfgMatchService implements IMesTimeEfficientCfgMatc
return true;
}
public static void main(String[] args) {
try {
Double minValue = 1d;
Double maxValue = 240d;
SimpleDateFormat sdf = new SimpleDateFormat(MesPcnExtConstWords.DATE_FORMAT);
// Date now = new Date();
Date now = sdf.parse("2025-03-21 11:19:06");
Date productDateTime = sdf.parse("2025-03-21 11:15:06");
int minDiff = (int) ((now.getTime() - productDateTime.getTime())/(60 * 1000));
Integer matchRule = 40;
if (MesExtEnumUtil.MATCH_RULE.MATCH_RULE_20.getValue().equals(matchRule)) {
//差值 小于最小时差有效
if (minDiff >= minValue){
System.out.println(false);
}
} else if (MesExtEnumUtil.MATCH_RULE.MATCH_RULE_30.getValue().equals(matchRule)) {
// 差值 大于最大时差有效
if (minDiff <= maxValue){
System.out.println(false);
}
} else if (MesExtEnumUtil.MATCH_RULE.MATCH_RULE_40.getValue().equals(matchRule)) {
// 差值 最大最小时差有效 在 最大值 最小值之间
if (minDiff <= minValue || minDiff >= maxValue){
System.out.println(false);
}
} else if (MesExtEnumUtil.MATCH_RULE.MATCH_RULE_50.getValue().equals(matchRule)) {
// 差值 最大外或最小内有效
if (minDiff >= minValue && minDiff <= maxValue){
System.out.println(false);
}
}
System.out.println("执行完成");
} catch (ParseException e) {
e.printStackTrace();
}
}
}

@ -157,6 +157,7 @@ public class MesWorkOrderSaveNosortStepService extends BaseStepService {
if (null != scanMonitorContext) workOrderCalcQtyRecord.setMouldRecordId(scanMonitorContext.getMouldRecordId());
workOrderCalcQtyRecord.setDealStatus(MesExtEnumUtil.MES_LOG_DEAL_STATUS.UNDEAL.getValue());
workOrderCalcQtyRecord.setCreateUser(reqBean.getUserInfo());
workOrderCalcQtyRecord.setModifyUser(reqBean.getUserInfo());
workOrderCalcQtyRecord.setCreateDatetime((new SimpleDateFormat(MesPcnExtConstWords.DATE_FORMAT_SSS)).format(new Date()));

Loading…
Cancel
Save