Merge remote-tracking branch 'origin/dev-wuhan-temp' into dev-wuhan-temp

tags/yfai-pcn-ext-v2.3
臧学普 6 months ago
commit 90438bf32a

@ -1,9 +0,0 @@
package cn.estsh.i3plus.ext.mes.pcn.api.job;
import cn.estsh.i3plus.pojo.mes.bean.MesPcnSyncOfflineLog;
public interface IMesOffLineDataSyncJobService {
String doOffLineDataSync(MesPcnSyncOfflineLog pcnSyncOfflineLog);
}

@ -1,21 +0,0 @@
package cn.estsh.i3plus.ext.mes.pcn.api.job;
import cn.estsh.i3plus.pojo.mes.bean.MesDatasource;
import cn.estsh.i3plus.pojo.mes.bean.MesPcnSyncOfflineLog;
import java.util.List;
import java.util.Map;
public interface IMesOffLineDataSyncService {
List<MesPcnSyncOfflineLog> getPcnSyncOfflineLogList(String organizeCode);
List<String> filterPcnSyncOfflineLogList(List<MesPcnSyncOfflineLog> pcnSyncOfflineLogList, Boolean flag);
Map<String, String> filterFaulurePcnSyncOfflineLog(List<MesPcnSyncOfflineLog> pcnSyncOfflineLogList);
MesPcnSyncOfflineLog insertPcnSyncOfflineLog(MesPcnSyncOfflineLog pcnSyncOfflineLog, String tableName);
void insertBaseBeanData(MesPcnSyncOfflineLog pcnSyncOfflineLog, List<Map<String, Object>> resultList, String objectCode, String tableName) throws Exception;
}

@ -0,0 +1,13 @@
//package cn.estsh.i3plus.ext.mes.pcn.api.job;
//
//import java.util.Map;
//
//public interface IMesWorkOrderOfflineRestoreService {
//
// /**
// * 补录离线生产数据JOB
// * @param paramMap
// */
// void doRestoreWorkOrderOfflineData(Map<String, String> paramMap);
//
//}

@ -1,57 +0,0 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.config;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesDatasource;
import cn.estsh.i3plus.pojo.mes.bean.MesPcnTask;
import io.swagger.annotations.ApiParam;
import lombok.Data;
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.StringUtils;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
@ConditionalOnExpression("'${mes.offline.sync.open:false}' == 'true'")
@Data
@Configuration
@ConfigurationProperties(prefix = "mes.offline.sync")
public class MesOffLineConfig {
//离线数据源配置
private MesDatasourceModel dataSource = new MesDatasourceModel();
//离线数据同步JOB配置
private MesPcnTaskModel pcnTask = new MesPcnTaskModel();
//sql参数注入值
private Map<String, String> sqlParameter = new HashMap<>();
//同步sql
private Map<String, String> sql = new HashMap<>();
public class MesDatasourceModel extends MesDatasource implements Serializable {
private static final long serialVersionUID = 7825562788566047534L;
@ApiParam("主机端口")
private String dsHostPort;
public void setDsHostPort(String dsHostPort) {
this.dsHostPort = dsHostPort;
if (!StringUtils.isEmpty(this.dsHostPort)) setDsPort(Integer.valueOf(this.dsHostPort));
}
}
public class MesPcnTaskModel extends MesPcnTask implements Serializable {
private static final long serialVersionUID = -521750700257233487L;
public MesPcnTaskModel() {
this.isDeleted = CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue();
this.isValid = CommonEnumUtil.IS_VAILD.VAILD.getValue();
}
}
}

@ -1,72 +0,0 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.controller.busi;
import cn.estsh.i3plus.ext.mes.pcn.api.job.IMesOffLineDataSyncJobService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.config.MesOffLineConfig;
import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.pojo.mes.bean.MesPcnSyncOfflineLog;
import cn.estsh.impp.framework.boot.exception.ImppBusiException;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.impp.framework.boot.util.ResultBean;
import cn.estsh.impp.framework.boot.util.SpringContextsUtil;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.net.InetAddress;
import java.util.HashMap;
import java.util.Map;
@RestController
@RequestMapping(MesCommonConstant.MES_YANFEN + "/offline-data-sync")
public class MesOffLineDataSyncController {
@Autowired
private IMesOffLineDataSyncJobService offLineDataSyncJobService;
@GetMapping("/cfg/get")
@ApiOperation(value = "获取离线配置")
public ResultBean getOffLineCfg() {
try {
MesOffLineConfig offLineConfig = (MesOffLineConfig) SpringContextsUtil.getBean("mesOffLineConfig");
Map<String, Object> resultMap = new HashMap<>();
resultMap.put("dataSource", offLineConfig.getDataSource());
resultMap.put("pcnTask", offLineConfig.getPcnTask());
resultMap.put("sqlParameter", offLineConfig.getSqlParameter());
resultMap.put("sql", offLineConfig.getSql());
return ResultBean.success("查询成功").setResultMap(resultMap);
} catch (ImppBusiException imppException) {
return ResultBean.fail(imppException);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
@GetMapping("/do")
@ApiOperation(value = "执行离线同步")
public ResultBean doOffLineDataSync() {
try {
MesOffLineConfig offLineConfig = (MesOffLineConfig) SpringContextsUtil.getBean("mesOffLineConfig");
String param = offLineConfig.getPcnTask().getTaskParam();
String[] params = StringUtils.isEmpty(param) ? null : param.split(MesPcnExtConstWords.COLON);
if (null == params || params.length != 4) return ResultBean.fail("参数配置错误,参数正确格式[ mes.offline.sync.pcnTask.taskParam = 工厂:区域:生产线:工位 ]");
MesPcnSyncOfflineLog pcnSyncOfflineLog = new MesPcnSyncOfflineLog(params[0], params[1], params[2], params[3]);
pcnSyncOfflineLog.setSyncTarget(InetAddress.getLocalHost().getHostAddress());
return ResultBean.success(offLineDataSyncJobService.doOffLineDataSync(pcnSyncOfflineLog));
} catch (ImppBusiException imppException) {
return ResultBean.fail(imppException);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
}

@ -72,6 +72,7 @@ public class MesPullingOrderInfoController {
if (StringUtils.isEmpty(mesPullingOrderInfo.getWorkCenterCode())) {
throw new ImppBusiException("产线不能为空");
}
mesPullingOrderInfo.setOrganizeCode(StringUtil.isEmpty(mesPullingOrderInfo.getOrganizeCode()) ? AuthUtil.getOrganizeCode() : mesPullingOrderInfo.getOrganizeCode());
List<MesPullingOrderInfo> pullingOrderInfos = mesPullingOrderInfoService.doMesPullingOrderInfoPrint(mesPullingOrderInfo, AuthUtil.getSessionUser().getUserName());
return ResultBean.success("拉动单打印成功")
.setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode())

@ -1,78 +0,0 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.schedulejob;
import cn.estsh.i3plus.ext.mes.pcn.api.job.IMesOffLineDataSyncJobService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.pojo.mes.bean.MesPcnSyncOfflineLog;
import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.quartz.DisallowConcurrentExecution;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StopWatch;
import java.net.InetAddress;
/**
* @Author: Wynne.Lu
* @CreateDate: 2019/12/17 1:18
* @Description:
**/
@Slf4j
@ApiOperation("MES同步离线数据JOB")
@DisallowConcurrentExecution
public class MesOffLineDataSyncJob implements Job {
@Autowired
private IMesOffLineDataSyncJobService offLineDataSyncJobService;
public MesOffLineDataSyncJob() {}
@Override
public void execute(JobExecutionContext jobExecutionContext) {
log.info("MES同步离线数据JOB --- START ---");
StopWatch stopWatch = new StopWatch();
stopWatch.start();
try {
Object param = jobExecutionContext.getJobDetail().getJobDataMap().get("param");
if (null == param) {
log.info("MES同步离线数据JOB --- ERROR --- 未配置参数 ---");
return;
}
String[] params = param.toString().split(MesPcnExtConstWords.COLON);
if (null == params || params.length != 4) {
log.info("MES同步离线数据JOB --- ERROR --- 参数配置错误,参数正确格式[ mes.offline.sync.pcnTask.taskParam = 工厂:区域:生产线:工位 ] ---");
return;
}
MesPcnSyncOfflineLog pcnSyncOfflineLog = new MesPcnSyncOfflineLog(params[0], params[1], params[2], params[3]);
pcnSyncOfflineLog.setSyncTarget(InetAddress.getLocalHost().getHostAddress());
String success = offLineDataSyncJobService.doOffLineDataSync(pcnSyncOfflineLog);
log.info("MES同步离线数据JOB --- EXEC --- {} ---", success);
} catch (Exception e) {
log.info("MES同步离线数据JOB --- ERROR --- {} ---", JSONObject.toJSONString(e));
} finally {
stopWatch.stop();
log.info("MES同步离线数据JOB --- END --- 耗时:{} ms ---", stopWatch.getTotalTimeMillis());
}
}
}

@ -0,0 +1,77 @@
//package cn.estsh.i3plus.ext.mes.pcn.apiservice.schedulejob;
//
//
//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;
//import io.swagger.annotations.ApiOperation;
//import lombok.extern.slf4j.Slf4j;
//import org.quartz.DisallowConcurrentExecution;
//import org.quartz.JobExecutionContext;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Component;
//import org.springframework.util.CollectionUtils;
//import org.springframework.util.StopWatch;
//import org.springframework.util.StringUtils;
//
//import java.util.Map;
//
///**
// * @author wangjie
// * @Description 补录离线生产数据JOB
// * @version 1.0
// * @date 2021/2/2 16:44
// **/
//@Slf4j
//@DisallowConcurrentExecution
//@Component
//@ApiOperation("补录离线生产数据JOB")
//public class MesWorkOrderOfflineRestoreJob extends BaseMesScheduleJob {
//
// public MesWorkOrderOfflineRestoreJob() {
// super(MesWorkOrderOfflineRestoreJob.class, "补录离线生产数据JOB");
// }
//
// @Autowired
// private IMesWorkOrderOfflineRestoreService workOrderOfflineRestoreService;
//
// @Override
// public void executeMesJob(JobExecutionContext context, ApplicationProperties applicationProperties) {
//
// String jobParam = this.getJobParam();
// if (StringUtils.isEmpty(jobParam)) {
// log.info("补录离线生产数据JOB --- 参数为空 ---");
// return;
// }
//
// Map<String, String> paramMap = JSONObject.parseObject(jobParam, Map.class);
//
// if (CollectionUtils.isEmpty(paramMap) || !paramMap.containsKey(MesPcnExtConstWords.ORGANIZE_CODE)) {
// log.info("补录离线生产数据JOB --- 参数未配置:工厂代码[organizeCode] ---");
// return;
// }
//
// StopWatch stopWatch = new StopWatch();
//
// try {
//
// stopWatch.start();
//
// workOrderOfflineRestoreService.doRestoreWorkOrderOfflineData(paramMap);
//
// } catch (Exception e) {
//
// log.info("补录离线生产数据JOB --- ERROR --- {} ---", e.toString());
//
// } finally {
//
// stopWatch.stop();
//
// log.info("补录离线生产数据JOB --- END --- 耗时: {} ms ---", stopWatch.getTotalTimeMillis());
//
// }
//
// }
//
//}

@ -67,12 +67,12 @@ public class MesAssemblyExtService implements IMesAssemblyExtService {
if (CollectionUtils.isEmpty(workOrderAssemblyList)) return null;
//获取排序FILE文件URL 【离线生产不需要获取文件】
Map<Long, String> fileMap = !prodRuleContext.getIsClosedCheck() ? getFileMap(prodRuleContext.getOrganizeCode(), filterSortFileIdList(workOrderAssemblyList)) : null;
//获取排序FILE文件URL
Map<Long, String> fileMap = getFileMap(prodRuleContext.getOrganizeCode(), filterSortFileIdList(workOrderAssemblyList));
List<MesProductionAssemblySortContext> productionAssemblySortContextList = new ArrayList<>();
workOrderAssemblyList.forEach(o -> productionAssemblySortContextList.add(new MesProductionAssemblySortContext().copy(o).fileUrl(fileMap).foreignKey(prodRuleContext.getForeignKey()).isClosedCheck(prodRuleContext.getIsClosedCheck())));
workOrderAssemblyList.forEach(o -> productionAssemblySortContextList.add(new MesProductionAssemblySortContext().copy(o).fileUrl(fileMap).foreignKey(prodRuleContext.getForeignKey())));
return productionAssemblySortContextList;
}
@ -101,17 +101,16 @@ public class MesAssemblyExtService implements IMesAssemblyExtService {
workOrderAssemblyList.forEach(o -> productionAssemblySortContextList.add(
new MesProductionAssemblySortContext()
.copy(o, getProductionAssembly(productionAssemblyMap, o.getId()), getIsCheckBindSeq(getWorkCell(workCellMap, o.getWorkCellCode()), prodRuleContext.getIsClosedCheck()))
.foreignKey(prodRuleContext.getForeignKey()).isClosedCheck(prodRuleContext.getIsClosedCheck())
.copy(o, getProductionAssembly(productionAssemblyMap, o.getId()), getIsCheckBindSeq(getWorkCell(workCellMap, o.getWorkCellCode())))
.foreignKey(prodRuleContext.getForeignKey())
)
);
return productionAssemblySortContextList;
}
//判断是否按序扫描【离线默认有序】
private Integer getIsCheckBindSeq(MesWorkCell workCell, Boolean isClosedCheck) {
if (isClosedCheck) return CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue();
//判断是否按序扫描
private Integer getIsCheckBindSeq(MesWorkCell workCell) {
return (null != workCell && !StringUtils.isEmpty(workCell.getIsSeqScan())) ? workCell.getIsSeqScan() : CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue();
}

@ -54,6 +54,8 @@ public class MesJisShippingServiceImpl implements IMesJisShippingService {
jisShipping.setCusCode(orderManagement.getCustCode());
jisShipping.setCusDock(orderManagement.getCustDockCode());
jisShipping.setCustOrderNo(orderManagement.getOrderCode());
// 20241115 没有给carNo赋值
jisShipping.setCarNo(k.getVin());
jisShipping.setSerialNumber(k.getBarcode());
jisShipping.setQuantityPerCar(1d);
jisShipping.setOffTime(TimeTool.getNowTime(true));

@ -39,19 +39,12 @@ public class MesPullingOrderInfoService implements IMesPullingOrderInfoService {
public static final Logger LOGGER = LoggerFactory.getLogger(MesPullingOrderInfoService.class);
@Autowired
private MesPullingOrderInfoRepository mesPullingOrderInfoRepository;
@Autowired
private MesPullingOrderPartInfoRepository mesPullingOrderPartInfoRepository;
@Autowired
private MesPartPullRepository mesPartPullRDao;
@Autowired
private MesPartPullDetailRepository mesPartPullDetailRDao;
@Autowired
private MesWorkOrderPartRepository workOrderPartRepository;
@Autowired
private MesWorkCenterRepository mesWorkCenterRepository;
@Autowired
private MesPullingOrderExtendsRepository mesPullingOrderExtendsRepository;
private MesPartPullDetailRepository mesPartPullDetailRDao;
@Autowired
private IMesProduceSnExtService mesProduceSnExtService;
@ -65,6 +58,9 @@ public class MesPullingOrderInfoService implements IMesPullingOrderInfoService {
@Autowired
private MesConfigRepository configRao;
@Autowired
private MesCustomerCarModelRepository carModelRepository;
@Override
public ListPager<MesPullingOrderInfo> queryMesPullingOrderInfoByPager(MesPullingOrderInfo bean, Pager pager) {
@ -184,8 +180,10 @@ public class MesPullingOrderInfoService implements IMesPullingOrderInfoService {
DdlPreparedPack.getStringEqualPack(bean.getPullingOrderNo(), "pullingOrderNo", packBean);
DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.PRINT_STATUS.UNPRINT.getValue(), "printStatus", packBean);
DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"createDatetime"}, packBean);
List<MesPullingOrderInfo> pullingOrderInfos = mesPullingOrderInfoRepository.findByHqlWhere(packBean);
List<MesPullingOrderInfo> pullingOrderInfos = mesPullingOrderInfoRepository.findByHqlTopWhere(packBean, MesPcnExtConstWords.THREE);
if (!CollectionUtils.isEmpty(pullingOrderInfos)) {
//根据车型代码查询车型信息
Map<String, List<MesCustomerCarModel>> mesCustomerCarModelMap = getMesCustomerCarModelMap(bean.getOrganizeCode(), pullingOrderInfos.stream().map(MesPullingOrderInfo::getCarModelCode).distinct().collect(Collectors.toList()));
//把查出来的拉动单打印并修改打印状态为已打印
List<MesPrintedSnLog> snLogList = new ArrayList<>();
for (MesPullingOrderInfo pullingOrderInfo : pullingOrderInfos) {
@ -206,7 +204,7 @@ public class MesPullingOrderInfoService implements IMesPullingOrderInfoService {
pullingOrderInfo.setWorkOrderNoLast(!StringUtil.isEmpty(pullingOrderInfo.getWorkOrderNo())?pullingOrderInfo.getWorkOrderNo().substring(pullingOrderInfo.getWorkOrderNo().length() - MesPcnExtConstWords.THREE):"");
pullingOrderInfo.setWorkOrderNoPre(!StringUtil.isEmpty(pullingOrderInfo.getWorkOrderNo())?pullingOrderInfo.getWorkOrderNo().substring(MesPcnExtConstWords.ZERO,pullingOrderInfo.getWorkOrderNo().length() - MesPcnExtConstWords.THREE):"");
pullingOrderInfo.setCustOrderNoLast(!StringUtil.isEmpty(pullingOrderInfo.getCustOrderNo())?pullingOrderInfo.getCustOrderNo().substring(pullingOrderInfo.getCustOrderNo().length() - MesPcnExtConstWords.FOUR):"");
pullingOrderInfo.setPartNamePrint("车型:"+pullingOrderInfo.getPartName());
pullingOrderInfo.setCarModelName("车型:" + (Objects.isNull(mesCustomerCarModelMap) || StringUtil.isEmpty(pullingOrderInfo.getCarModelCode()) || !mesCustomerCarModelMap.containsKey(pullingOrderInfo.getCarModelCode()) ? "" : mesCustomerCarModelMap.get(pullingOrderInfo.getCarModelCode()).iterator().next().getCarModelName()));
pullingOrderInfo.setPrintTime(TimeTool.getNowTime(true));
pullingOrderInfo.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.PRINTED.getValue());
@ -557,4 +555,16 @@ public class MesPullingOrderInfoService implements IMesPullingOrderInfoService {
return mesPullingOrder;
}
public Map<String, List<MesCustomerCarModel>> getMesCustomerCarModelMap(String organizeCode, List<String> carModelCodeList) {
if (StringUtil.isEmpty(organizeCode) || CollectionUtils.isEmpty(carModelCodeList)) return null;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
if (carModelCodeList.size() == MesPcnExtConstWords.ONE) {
DdlPreparedPack.getStringEqualPack(carModelCodeList.get(MesPcnExtConstWords.ZERO), MesPcnExtConstWords.CAR_MODEL_CODE, packBean);
} else {
DdlPreparedPack.getInPackList(carModelCodeList, MesPcnExtConstWords.CAR_MODEL_CODE, packBean);
}
List<MesCustomerCarModel> customerCarModelList = carModelRepository.findByHqlWhere(packBean);
return CollectionUtils.isEmpty(customerCarModelList) ? null : customerCarModelList.stream().collect(Collectors.groupingBy(MesCustomerCarModel::getCarModelCode));
}
}

@ -29,6 +29,7 @@ import cn.estsh.impp.framework.boot.exception.ImppBusiException;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.impp.framework.boot.util.ValidatorBean;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.map.HashedMap;
import org.apache.commons.collections4.ListUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
@ -82,6 +83,8 @@ public class MesSpotCheckOrderService implements IMesSpotCheckOrderService {
@Autowired
private IMesEquipmentExtService mesEquipmentExtService;
@Autowired
private MesEquipmentRepository mesEquipmentRepository;
@Override
public ListPager<MesSpotCheckOrder> querySpotCheckOrder(MesSpotCheckOrder spotCheckOrder, Pager pager) {
@ -91,6 +94,19 @@ public class MesSpotCheckOrderService implements IMesSpotCheckOrderService {
pager = PagerHelper.getPager(pager, spotCheckOrderRepository.findByHqlWhereCount(packBean));
List<MesSpotCheckOrder> resultList = spotCheckOrderRepository.findByHqlWherePage(packBean, pager);
if (CollectionUtils.isEmpty(resultList)) {
return new ListPager<>(resultList, pager);
}
List<String> equipmentlist = resultList.stream().map(MesSpotCheckOrder::getEquipCode).collect(Collectors.toList());
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(spotCheckOrder.getOrganizeCode());
DdlPreparedPack.getInPackList(equipmentlist, "equipmentCode", ddlPackBean);
List<MesEquipment> mesEquipments = mesEquipmentRepository.findByHqlWhere(ddlPackBean);
Map<String, List<MesEquipment>> map = mesEquipments.stream().collect(Collectors.groupingBy(MesEquipment::getEquipmentCode));
resultList.forEach(mesSpotCheckOrder -> {
mesSpotCheckOrder.setEquipId(map.get(mesSpotCheckOrder.getEquipCode()).get(0).getEquipId());
});
return new ListPager<>(resultList, pager);
@ -298,13 +314,14 @@ public class MesSpotCheckOrderService implements IMesSpotCheckOrderService {
spotCheckOrderPartRepository.saveAll(model.getOrderPartList());
Integer orderResult = MesExtEnumUtil.SPOT_CHECK_ORDER_RESULT_TYPE.OK.getValue();
// 点检单的结果
for (MesSpotCheckOrderResult result : model.getOrderResultList()) {
if (StringUtils.isEmpty(result.getSpotCheckRealValue())) {
throw new ImppBusiException(String.format("点检单明细未填写完成,请继续质检", result.getSpotCheckRealValue()));
}
if (result.getIsTolerance() == MesCommonConstant.TRUE_INTEGER && orderResult == MesExtEnumUtil.SPOT_CHECK_ORDER_RESULT_TYPE.OK.getValue()) {
if (Objects.equals(result.getSpotCheckResult(), "NOK") && Objects.equals(MesExtEnumUtil.SPOT_CHECK_ORDER_RESULT_TYPE.OK.getValue(), orderResult)) {
// 如果有NOK的则不用管全OK才是OK否则就是NOK
orderResult = MesExtEnumUtil.SPOT_CHECK_ORDER_RESULT_TYPE.NOK.getValue();
}
result.setSpotCheckTime(TimeTool.getNowTime(true));
@ -576,6 +593,8 @@ public class MesSpotCheckOrderService implements IMesSpotCheckOrderService {
//查询点检明细
DdlPackBean packBean = DdlPackBean.getDdlPackBean(spotCheckOrder.getOrganizeCode());
DdlPreparedPack.getNumEqualPack(spotCheckOrder.getId(), "pid", packBean);
DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue()}, new String[]{"seqCode"}, packBean);
List<MesSpotCheckOrderResult> orderResultList = spotCheckOrderResultRepository.findByHqlWhere(packBean);
//查询点检零件
@ -638,10 +657,11 @@ public class MesSpotCheckOrderService implements IMesSpotCheckOrderService {
//根据条码状态判断 是不是已下线条码
//若不是已下线的条码则提示 条码状态 请选择已下线的条码
if (produceSn.getSnStatus() != MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue()) {
// 2024-11-12 激光打码和打印条码,也能够执行
/*if (produceSn.getSnStatus() != MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue()) {
throw new ImppBusiException(String.format("【%s】此条码状态为【%s】,请选择状态为【%s】状态的条码", serialNumber, MesExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(produceSn.getSnStatus()),
MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getDescription()));
}
}*/
//是否需要判断条码质量状态
if (produceSn.getQcStatus() != MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()) {

@ -25,7 +25,6 @@ import cn.estsh.i3plus.pojo.base.util.StringUtil;
import cn.estsh.i3plus.pojo.mes.bean.*;
import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel;
import cn.estsh.i3plus.pojo.mes.repository.*;
import cn.estsh.i3plus.pojo.mes.repository.shipping.MesWorkOrderToWmsRepository;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import cn.estsh.impp.framework.boot.exception.ImppBusiException;
import cn.hutool.core.date.DatePattern;
@ -33,7 +32,6 @@ import cn.hutool.core.date.DateUtil;
import cn.hutool.core.date.format.DateParser;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
@ -94,8 +92,6 @@ public class MesWorkOrderService implements IMesWorkOrderService {
@Autowired
private MesWorkOrderLogRepository mesWorkOrderLogRepository;
@Autowired
private MesWorkOrderToWmsRepository mesWorkOrderToWmsRDao;
@Autowired
private MesShiftRepository mesShiftRepository;
@Autowired
private IMesConfigService configService;
@ -190,6 +186,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
DdlPreparedPack.getStringLikerPack(workOrder.getWorkCenterCode(), "workCenterCode", packBean);
DdlPreparedPack.getStringLikerPack(workOrder.getWorkCellCode(), "workCellCode", packBean);
DdlPreparedPack.getStringLikerPack(workOrder.getWorkOrderNo(), "workOrderNo", packBean);
DdlPreparedPack.getStringLikerPack(workOrder.getPartNo(), "partNo", packBean);
if (!StringUtils.isEmpty(workOrder.getWorkOrderStatus()))
DdlPreparedPack.getNumEqualPack(workOrder.getWorkOrderStatus(), "workOrderStatus", packBean);
@ -549,16 +546,6 @@ public class MesWorkOrderService implements IMesWorkOrderService {
oldMesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue());
}
}
LOGGER.info("工单报工后数量【{}】", oldMesWorkOrder.getReportedQty());
ConvertBean.serviceModelUpdate(oldMesWorkOrder, userName);
oldMesWorkOrder.setModifyDatetime((new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS")).format(new Date()));
workOrderExtService.update(oldMesWorkOrder);
//查询工作中心
DdlPackBean orderPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getNumEqualPack(oldMesWorkOrder.getId(), "id", orderPackBean);
workOrderRepository.updateByProperties(new String[]{"systemSyncStatus"},
new Object[]{CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()}, orderPackBean);
//保存数据
List<MesProductOffLine> mesProductOffLineList = new ArrayList<>();
@ -581,6 +568,17 @@ public class MesWorkOrderService implements IMesWorkOrderService {
return;
}
LOGGER.info("工单报工后数量【{}】", oldMesWorkOrder.getReportedQty());
ConvertBean.serviceModelUpdate(oldMesWorkOrder, userName);
oldMesWorkOrder.setModifyDatetime((new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS")).format(new Date()));
workOrderExtService.update(oldMesWorkOrder);
//查询工作中心
DdlPackBean orderPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getNumEqualPack(oldMesWorkOrder.getId(), "id", orderPackBean);
workOrderRepository.updateByProperties(new String[]{"systemSyncStatus"},
new Object[]{CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()}, orderPackBean);
if(!CollectionUtils.isEmpty(mesProductOffLineList)){
mesProductOffLineRDao.saveAll(mesProductOffLineList);
}
@ -651,6 +649,9 @@ public class MesWorkOrderService implements IMesWorkOrderService {
newMesProductOffLine.setWorkCenterCode(oldMesWorkOrder.getWorkCenterCode());
newMesProductOffLine.setWorkCellCode(oldMesWorkOrder.getWorkCellCode());
newMesProductOffLine.setReportType(oldMesWorkOrder.getReportType());
if (Objects.equals(MesExtEnumUtil.ORDER_TYPE.BTO.getValue(), oldMesWorkOrder.getWorkOrderType())){
newMesProductOffLine.setWorkCenterCode(mesProductVersion.getWorkCenterCode());
}
newMesProductOffLine.setSapWorkCenter(mesProductVersion.getWorkCenterCode());
newMesProductOffLine.setOrganizeCode(oldMesWorkOrder.getOrganizeCode());
newMesProductOffLine.setDescription(productionRecord.getCompleteDateTime());
@ -815,20 +816,6 @@ public class MesWorkOrderService implements IMesWorkOrderService {
return df.format(cal.getTime()).substring(0, 10);
}
private MesProductVersion getMesProductVersion(MesWorkOrder item, MesWorkCenter mesWorkCenter) {
DdlPackBean ddlPackBean;
ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(item.getPartNo(), "partNo", ddlPackBean);
DdlPreparedPack.getStringEqualPack(mesWorkCenter.getErpWorkCenter(), "workCenterCode", ddlPackBean);
ddlPackBean.setOrderByStr(" order by createDatetime desc ");
MesProductVersion mesProductVersion = mesProductVersionRDao.getByProperty(ddlPackBean);
if (Objects.isNull(mesProductVersion)) {
MesPcnException.throwMesBusiException("物料【%s】工作中心【%s】对应的生产版本信息不存在", item.getPartNo(),
mesWorkCenter.getErpWorkCenter());
}
return mesProductVersion;
}
@Override
public List<MesProductionRecord> getUnReportMesProduceSn(String organizeCode) {
@ -1211,7 +1198,6 @@ public class MesWorkOrderService implements IMesWorkOrderService {
//校验标识
//若工单类型为排序
List<MesWorkOrderToWms> saveMesWorkOrderToWms = new ArrayList<>();
if (item.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue()) {
//校验产线类型和工单类型是否匹配
if (!Objects.equals(mesWorkCenter.getCenterType(), MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue())) {
@ -1230,18 +1216,12 @@ public class MesWorkOrderService implements IMesWorkOrderService {
if (org.springframework.util.CollectionUtils.isEmpty(bomList)) {
continue;
}
//发送工单信息给WMS
saveMesWorkOrderToWms.addAll(saveMesWorkOrderToWms(item, bomList));
}
item.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
item.setFid(UUID.randomUUID().toString());
ConvertBean.serviceModelInitialize(item, userName);
MesWorkOrder mesWorkOrder = workOrderRepository.insert(item);
//保存发送WMS数据
if (CollectionUtils.isNotEmpty(saveMesWorkOrderToWms)) {
mesWorkOrderToWmsRDao.saveAll(saveMesWorkOrderToWms);
}
saveMesWorkOrderLog(mesWorkOrder,MesExtEnumUtil.WORK_ORDER_LOG_TYPE.INSERT.getValue(),item.getQty());
mesWorkOrderList.add(mesWorkOrder);
}
@ -1249,36 +1229,8 @@ public class MesWorkOrderService implements IMesWorkOrderService {
return mesWorkOrderList;
}
public void deleteUnSortOrder(String organizeCode, List<String> partNoList) {
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getInPackList(partNoList, "partNo", ddlPackBean);
DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue(), "workOrderType", ddlPackBean);
DdlPreparedPack.getStringSmallerNotEqualPack(TimeTool.getToday(), "planStartTime", ddlPackBean);
DdlPreparedPack.getNumberSmallerPack(MesExtEnumUtil.ORDER_STATUS.CLOSE.getValue(), "workOrderStatus", ddlPackBean);
workOrderRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "workOrderStatus"},
new Object[]{"CLOSE_JOB", TimeTool.getNowTime(true), MesExtEnumUtil.ORDER_STATUS.CLOSE.getValue()}, ddlPackBean);
}
public List<MesWorkOrderToWms> saveMesWorkOrderToWms(MesWorkOrder mesWorkOrder, List<MesBom> mesBomList) {
List<MesWorkOrderToWms> mesWorkOrderToWmsList = new ArrayList<>();
MesWorkOrderToWms mesWorkOrderToWms = null;
for (MesBom mesBom : mesBomList) {
mesWorkOrderToWms = new MesWorkOrderToWms();
BeanUtils.copyProperties(mesWorkOrder, mesWorkOrderToWms, "id");
mesWorkOrderToWms.setUnit(mesBom.getUnit());
mesWorkOrderToWms.setItemPartNo(mesBom.getItemPartNo());
mesWorkOrderToWms.setItemPartName(mesBom.getItemPartName());
mesWorkOrderToWms.setItemUnit(mesBom.getItemUnit());
mesWorkOrderToWms.setItemQty(MathOperation.mul(mesWorkOrder.getQty(), mesBom.getItemQty()));
ConvertBean.serviceModelInitialize(mesWorkOrderToWms, mesWorkOrderToWms.getCreateUser());
mesWorkOrderToWmsList.add(mesWorkOrderToWms);
}
return mesWorkOrderToWmsList;
}
private MesProductVersion checkMesProductVersion(MesWorkOrder item) {
DdlPackBean ddlPackBean;
ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(item.getPartNo(), "partNo", ddlPackBean);
DdlPreparedPack.getStringEqualPack(item.getErpWorkCenter(), "workCenterCode", ddlPackBean);
MesProductVersion mesProductVersion = mesProductVersionRDao.getByProperty(ddlPackBean);

@ -1,218 +0,0 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.job;
import cn.estsh.i3plus.ext.mes.pcn.api.job.IMesOffLineDataSyncJobService;
import cn.estsh.i3plus.ext.mes.pcn.api.job.IMesOffLineDataSyncService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.config.MesOffLineConfig;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.serviceimpl.base.PcnJobService;
import cn.estsh.i3plus.mes.pcn.util.BsJdbcTemplate;
import cn.estsh.i3plus.mes.pcn.util.BsJdbcTemplateConfig;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.platform.common.tool.TimeTool;
import cn.estsh.i3plus.pojo.mes.bean.MesDatasource;
import cn.estsh.i3plus.pojo.mes.bean.MesPcnSyncOfflineLog;
import cn.estsh.i3plus.pojo.mes.bean.MesPcnTask;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import cn.estsh.impp.framework.boot.util.SpringContextsUtil;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.*;
@Slf4j
@Primary
@Service
public class MesOffLineDataSyncJobService extends PcnJobService implements IMesOffLineDataSyncJobService {
private MesOffLineConfig offLineConfig;
private BsJdbcTemplateConfig jdbcTemplateConfig;
@Autowired
private IMesOffLineDataSyncService offLineDataSyncService;
@Override
public List<MesPcnTask> loadJobs(Boolean pcnScheduleJob, Boolean mesOffLineSyncOpen) {
List<MesPcnTask> list = super.loadJobs(pcnScheduleJob, mesOffLineSyncOpen);
if (!mesOffLineSyncOpen) return list;
try {
offLineConfig = (MesOffLineConfig) SpringContextsUtil.getBean("mesOffLineConfig");
jdbcTemplateConfig = (BsJdbcTemplateConfig) SpringContextsUtil.getBean("bsJdbcTemplateConfig");
list.add(offLineConfig.getPcnTask());
} catch (Exception e) {
}
return list;
}
@Override
public String doOffLineDataSync(MesPcnSyncOfflineLog pcnSyncOfflineLog) {
if (null == offLineConfig) offLineConfig = (MesOffLineConfig) SpringContextsUtil.getBean("mesOffLineConfig");
if (null == offLineConfig) return "MesOffLineConfig IS NULL";
MesDatasource datasource = offLineConfig.getDataSource();
pcnSyncOfflineLog.setSyncSource(String.format("mysql://%s:%s/%s", datasource.getDsHost(), datasource.getDsPort(), datasource.getDsDbName()));
pcnSyncOfflineLog.setSyncPattern("全量同步");
pcnSyncOfflineLog.setSyncDate(TimeTool.getToday());
ConvertBean.serviceModelInitialize(pcnSyncOfflineLog, MesPcnExtConstWords.JOB);
pcnSyncOfflineLog.setSystemSyncDatetime(pcnSyncOfflineLog.getModifyDatetime());
String error = checkDataSourceIsValid(datasource);
if (!StringUtils.isEmpty(error)) return error;
Map<String, String> sqlMap = offLineConfig.getSql();
Map<String, String> sqlParameterMap = offLineConfig.getSqlParameter();
if (CollectionUtils.isEmpty(sqlMap) || CollectionUtils.isEmpty(sqlParameterMap)) return "SQL CFG IS NULL";
List<MesPcnSyncOfflineLog> pcnSyncOfflineLogList = offLineDataSyncService.getPcnSyncOfflineLogList(pcnSyncOfflineLog.getOrganizeCode());
List<String> successedList = offLineDataSyncService.filterPcnSyncOfflineLogList(pcnSyncOfflineLogList, true);
if (!CollectionUtils.isEmpty(successedList) && successedList.containsAll(sqlMap.keySet())) return String.format("%s已同步成功,无需重复执行!", sqlMap.keySet().toString());
Map<String, String> failuredMap = offLineDataSyncService.filterFaulurePcnSyncOfflineLog(pcnSyncOfflineLogList);
if (null == jdbcTemplateConfig) jdbcTemplateConfig = (BsJdbcTemplateConfig) SpringContextsUtil.getBean("bsJdbcTemplateConfig");
BsJdbcTemplate bsJdbcTemplate = null != jdbcTemplateConfig ? jdbcTemplateConfig.getJdbcTemplate(datasource) : null;
Boolean isConn = null != jdbcTemplateConfig ? jdbcTemplateConfig.checkDbConn(datasource) : false;
String tableName;
Boolean success = true;
List<String> successTableNameList = new ArrayList<>();
List<String> failureTableNameList = new ArrayList<>();
for (String objectCode : sqlMap.keySet()) {
if (StringUtils.isEmpty(objectCode)) continue;
if (!objectCode.contains(MesPcnExtConstWords.DECIMAL_POINT)) {
tableName = objectCode;
} else {
//如果pojo在 DEFAULT_POJO_ROUTE 下面还有包, 配置的时候需带上除去 DEFAULT_POJO_ROUTE 以外的包
String[] suffix = objectCode.split(MesPcnExtConstWords.DECIMAL_POINT_ESCAPE);
tableName = suffix[suffix.length - 1];
}
if (!CollectionUtils.isEmpty(successedList) && successedList.contains(tableName)) continue;
Boolean status = false;
String remark = null;
try {
String sql = sqlMap.get(objectCode);
if (StringUtils.isEmpty(sql)) {
remark = "SQL IS NULL";
continue;
}
if (null == jdbcTemplateConfig) {
remark = "BsJdbcTemplateConfig IS NULL";
continue;
}
if (null == bsJdbcTemplate) {
remark = "BsJdbcTemplate IS NULL";
continue;
}
if (!isConn) {
remark = "checkDbConn IS FALSE";
continue;
}
Map<String, Object> paramMap = new HashMap<>();
for (Map.Entry<String, String> sqlParameter : sqlParameterMap.entrySet()) {
if (null == sqlParameter || StringUtils.isEmpty(sqlParameter.getValue())) continue;
if (!sql.contains(MesPcnExtConstWords.COLON + sqlParameter.getKey())) continue;
if (sqlParameter.getKey().contains("_int")) paramMap.put(sqlParameter.getKey(), Integer.valueOf(sqlParameter.getValue()));
else if (sqlParameter.getKey().contains("_list")) paramMap.put(sqlParameter.getKey(), Arrays.asList(sqlParameter.getValue().split(MesPcnExtConstWords.COMMA)));
// TODO else if
else paramMap.put(sqlParameter.getKey(), sqlParameter.getValue());
}
List<Map<String, Object>> resultList = bsJdbcTemplate.getJdbcTemplate().queryForList(sql, paramMap);
if (CollectionUtils.isEmpty(resultList)) remark = "未查询到数据";
else {
offLineDataSyncService.insertBaseBeanData(pcnSyncOfflineLog, resultList, objectCode, tableName);
successTableNameList.add(tableName);
status = true;
}
} catch (Exception e) {
remark = e.toString();
success = false;
log.info("MES同步离线数据JOB --- ERROR --- {} ---", JSONObject.toJSONString(e));
} finally {
if (!status) {
insertPcnSyncOfflineLog2Failure(pcnSyncOfflineLog, tableName, failuredMap, remark);
failureTableNameList.add(String.format("[%s]同步失败原因[%s]", tableName, remark));
success = false;
}
}
}
if (!CollectionUtils.isEmpty(successTableNameList) && success) {
StringBuilder builder = new StringBuilder();
builder.append(" insert into mes_pcn_sync_offline_log ");
builder.append("( id, organize_code, is_valid, is_deleted, create_user, create_date_time, modify_user, modify_date_time, system_sync_date_time, system_sync_status,");
builder.append(" area_code, work_center_code, work_cell_code, object_code, effect_num, sync_date, sync_pattern, sync_source, sync_target, sync_result )");
builder.append(" values ( :id , :organizeCode , :isValid , :isDeleted , :createUser , :createDatetime , :modifyUser , :modifyDatetime , :systemSyncDatetime , :systemSyncStatus ,");
builder.append(" :areaCode , :workCenterCode , :workCellCode , :objectCode , :effectNum , :syncDate , :syncPattern , :syncSource , :syncTarget , :syncResult ); ");
Map<String, Object> paramMap = JSONObject.parseObject(JSONObject.toJSONString(pcnSyncOfflineLog), Map.class);
paramMap.put(MesPcnExtConstWords.OBJECT_CODE, sqlMap.keySet().toString());
paramMap.put(MesPcnExtConstWords.EFFECT_NUM, MesPcnExtConstWords.ZERO);
bsJdbcTemplate.getJdbcTemplate().update(builder.toString(), paramMap);
}
return (CollectionUtils.isEmpty(successTableNameList) ? MesPcnExtConstWords.EMPTY : String.format("%s同步成功!", successTableNameList.toString())) +
(CollectionUtils.isEmpty(failureTableNameList) ? MesPcnExtConstWords.EMPTY : failureTableNameList.toString());
}
private String checkDataSourceIsValid(MesDatasource datasource) {
if (null == datasource) return "MesDatasource IS NULL";
if (StringUtils.isEmpty(datasource.getDsCode())) return "离线边端数据库[dsCode]未配置!";
if (StringUtils.isEmpty(datasource.getDsName())) return "离线边端数据库[dsName]未配置!";
if (StringUtils.isEmpty(datasource.getDsType())) return "离线边端数据库[dsType]未配置!";
if (StringUtils.isEmpty(datasource.getDsHost())) return "离线边端数据库[dsHost]未配置!";
if (StringUtils.isEmpty(datasource.getDsPort())) return "离线边端数据库[dsHostPort]未配置!";
if (StringUtils.isEmpty(datasource.getDsUser())) return "离线边端数据库[dsUser]未配置!";
if (StringUtils.isEmpty(datasource.getDsPassword())) return "离线边端数据库[dsPassword]未配置!";
if (StringUtils.isEmpty(datasource.getDsDbName())) return "离线边端数据库[dsDbName]未配置!";
return null;
}
private void insertPcnSyncOfflineLog2Failure(MesPcnSyncOfflineLog pcnSyncOfflineLog, String objectCode, Map<String, String> failuredMap, String remark) {
if (!CollectionUtils.isEmpty(failuredMap) && failuredMap.containsKey(objectCode) && failuredMap.get(objectCode).equals(remark)) return;
offLineDataSyncService.insertPcnSyncOfflineLog(pcnSyncOfflineLog.syncResult(MesExtEnumUtil.MES_LOG_DEAL_STATUS.DEAL_FAILURE.getValue()).remark(remark), objectCode);
}
}

@ -1,136 +0,0 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.job;
import cn.estsh.i3plus.ext.mes.pcn.api.job.IMesOffLineDataSyncService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.util.StringUtil;
import cn.estsh.i3plus.platform.common.tool.ReflectTool;
import cn.estsh.i3plus.platform.common.tool.TimeTool;
import cn.estsh.i3plus.pojo.base.bean.BaseBean;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.jpa.dao.BaseRepository;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesPcnSyncOfflineLog;
import cn.estsh.i3plus.pojo.mes.repository.MesPcnSyncOfflineLogRepository;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import cn.estsh.impp.framework.boot.exception.ImppBusiException;
import cn.estsh.impp.framework.boot.util.SpringContextsUtil;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ArrayUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import javax.persistence.Column;
import java.lang.reflect.Field;
import java.util.*;
import java.util.stream.Collectors;
@Slf4j
@Service
public class MesOffLineDataSyncService implements IMesOffLineDataSyncService {
@Autowired
private MesPcnSyncOfflineLogRepository pcnSyncOfflineLogRepository;
private static String DEFAULT_POJO_ROUTE = "cn.estsh.i3plus.pojo.mes.bean.";
@Override
public List<MesPcnSyncOfflineLog> getPcnSyncOfflineLogList(String organizeCode) {
return pcnSyncOfflineLogRepository.findByProperty(
new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.SYNC_DATE},
new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), TimeTool.getToday()});
}
@Override
public List<String> filterPcnSyncOfflineLogList(List<MesPcnSyncOfflineLog> pcnSyncOfflineLogList, Boolean flag) {
return CollectionUtils.isEmpty(pcnSyncOfflineLogList) ? null : pcnSyncOfflineLogList.stream().filter(o -> (
null != o && o.getSyncResult().compareTo(MesExtEnumUtil.MES_LOG_DEAL_STATUS.getValueByFlag(flag)) == 0)).map(MesPcnSyncOfflineLog::getObjectCode).collect(Collectors.toList());
}
@Override
public Map<String, String> filterFaulurePcnSyncOfflineLog(List<MesPcnSyncOfflineLog> pcnSyncOfflineLogList) {
List<MesPcnSyncOfflineLog> filterList = CollectionUtils.isEmpty(pcnSyncOfflineLogList) ? null :
pcnSyncOfflineLogList.stream().filter(o -> (null != o && o.getSyncResult().compareTo(MesExtEnumUtil.MES_LOG_DEAL_STATUS.DEAL_FAILURE.getValue()) == 0)).collect(Collectors.toList());
if (CollectionUtils.isEmpty(filterList)) return null;
filterList = filterList.stream().filter(o -> null != o).sorted(Comparator.comparing(MesPcnSyncOfflineLog::getCreateDatetime).reversed()).collect(Collectors.toList());
filterList = filterList.stream().filter(o -> null != o).distinct().collect(Collectors.collectingAndThen(
Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(MesPcnSyncOfflineLog::getObjectCode))), ArrayList::new));
return filterList.stream().filter(o -> null != o).collect(Collectors.toMap(MesPcnSyncOfflineLog::getObjectCode, MesPcnSyncOfflineLog::getRemark));
}
@Override
@Transactional(propagation = Propagation.REQUIRES_NEW, noRollbackFor = {ImppBusiException.class, Exception.class})
public MesPcnSyncOfflineLog insertPcnSyncOfflineLog(MesPcnSyncOfflineLog pcnSyncOfflineLog, String tableName) {
pcnSyncOfflineLog.setObjectCode(tableName);
pcnSyncOfflineLog.setId(null);
pcnSyncOfflineLog = pcnSyncOfflineLogRepository.insert(pcnSyncOfflineLog);
log.info("MES同步离线数据JOB --- EXEC --- TABLE_NAME: {} --- {} ---", tableName, JSONObject.toJSONString(pcnSyncOfflineLog));
return pcnSyncOfflineLog;
}
@Override
@Transactional(propagation = Propagation.REQUIRES_NEW, noRollbackFor = {ImppBusiException.class, Exception.class})
public void insertBaseBeanData(MesPcnSyncOfflineLog pcnSyncOfflineLog, List<Map<String, Object>> resultList, String objectCode, String tableName) throws Exception {
String daoName = StringUtil.lineToHump(tableName);
String pojoName = StringUtil.toUpperCaseFirst(daoName);
String pojoRoute = DEFAULT_POJO_ROUTE + (!objectCode.contains(MesPcnExtConstWords.DECIMAL_POINT) ? pojoName : objectCode.replace(tableName, pojoName));
BaseRepository baseRepository = (BaseRepository) SpringContextsUtil.getBean(daoName + MesPcnExtConstWords.Repository);
List<BaseBean> historyList = baseRepository.findAll();
Map<Long, BaseBean> historyMap = CollectionUtils.isEmpty(historyList) ? null : historyList.stream().filter(o -> null != o).collect(Collectors.toMap(BaseBean::getId, o -> o));
Class clazz = Class.forName(pojoRoute);
Field[] fields = ArrayUtils.addAll(clazz.getFields(), clazz.getDeclaredFields());
String fieldName;
for (Map<String, Object> map : resultList) {
BaseBean baseBean = (BaseBean) clazz.newInstance();
for (Field field : fields) {
if (null == field) continue;
Column column = field.getAnnotation(Column.class);
if (null == column) continue;
fieldName = column.name().toLowerCase();
if (!map.containsKey(fieldName)) continue;
ReflectTool.setFieldValue(baseBean, field, map.get(fieldName));
}
baseBean.setSystemSyncDatetime(pcnSyncOfflineLog.getSystemSyncDatetime());
if (!CollectionUtils.isEmpty(historyMap) && historyMap.containsKey(baseBean.getId())) {
baseRepository.updateNoSync(baseBean);
historyMap.remove(baseBean.getId());
} else {
baseRepository.insert(baseBean);
}
}
historyList = CollectionUtils.isEmpty(historyMap) ? null :
historyMap.values().stream().filter(o -> (null != o && o.getIsDeleted().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0)).collect(Collectors.toList());
if (!CollectionUtils.isEmpty(historyList)) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(pcnSyncOfflineLog.getOrganizeCode());
DdlPreparedPack.getInPackList(historyList.stream().filter(o -> null != o).map(BaseBean::getId).collect(Collectors.toList()), MesPcnExtConstWords.ID, packBean);
baseRepository.updateByProperties(MesPcnExtConstWords.IS_DELETED, CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(), packBean);
}
insertPcnSyncOfflineLog(pcnSyncOfflineLog.syncResult(MesExtEnumUtil.MES_LOG_DEAL_STATUS.DEAL_SUCCESS.getValue()).effectNum(CollectionUtils.isEmpty(resultList) ? 0 : resultList.size()).remark(null), tableName);
}
}

@ -0,0 +1,52 @@
//package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.job;
//
//import cn.estsh.i3plus.ext.mes.pcn.api.job.IMesWorkOrderOfflineRestoreService;
//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.offline.MesWorkOrderAssemblyOffline;
//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.MesWorkOrderOfflineRestoreRecordRepository;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Service;
//
//import java.util.List;
//import java.util.Map;
//
//@Slf4j
//@Service
//public class MesWorkOrderOfflineRestoreService implements IMesWorkOrderOfflineRestoreService {
//
// @Autowired
// private MesWorkOrderAssemblyOfflineRepository workOrderAssemblyOfflineRepository;
//
// @Autowired
// private MesWorkOrderOfflineRepository workOrderOfflineRepository;
//
// @Autowired
// private MesWorkOrderOfflineRestoreRecordRepository workOrderOfflineRestoreRecordRepository;
//
// @Override
// public void doRestoreWorkOrderOfflineData(Map<String, String> paramMap) {
//
// String organizeCode = paramMap.get(MesPcnExtConstWords.ORGANIZE_CODE);
//
// Integer qty = paramMap.containsKey(MesPcnExtConstWords.QTY) ? Integer.valueOf(paramMap.get(MesPcnExtConstWords.QTY)) : MesPcnExtConstWords.ONE_HUNDRED;
//
// Map<String, List<MesWorkOrderAssemblyOffline>> workOrderAssemblyOfflineMap = getWorkOrderAssemblyOfflineMap(organizeCode, qty);
//
//
// }
//
// private Map<String, List<MesWorkOrderAssemblyOffline>> getWorkOrderAssemblyOfflineMap(String organizeCode, Integer qty) {
//
// DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
// DdlPreparedPack.getNumEqualPack(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), MesPcnExtConstWords.SYSTEM_SYNC_STATUS, packBean);
// List<MesWorkOrderAssemblyOffline> workOrderAssemblyOfflineList = workOrderAssemblyOfflineRepository.findByHqlTopWhere(packBean, qty);
//
// }
//
//}

@ -0,0 +1,50 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.numberrule;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesCustomerPartService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException;
import cn.estsh.i3plus.mes.pcn.api.iservice.busi.INumberRulePackAttributeStrategyService;
import cn.estsh.i3plus.pojo.mes.bean.MesCustomerPart;
import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;
/**
* @Description :
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/11/16 10:56
* @Modify:
**/
@Component
public class MesNoSortCustSnNumberRuleStrategyService implements INumberRulePackAttributeStrategyService {
@Autowired
private IMesCustomerPartService mesCustomerPartService;
@Override
public GenSerialNoModel execute(GenSerialNoModel genSerialNoModel) {
Map<String, Object> dataMap = genSerialNoModel.getDataMap();
MesCustomerPart customerPart = (!CollectionUtils.isEmpty(dataMap) && dataMap.containsKey(MesCustomerPart.class.getSimpleName())) ?
(MesCustomerPart)dataMap.get(MesCustomerPart.class.getSimpleName()) : mesCustomerPartService.getMesCustomerPart(genSerialNoModel.getOrganizeCode(), genSerialNoModel.getPartNo());
if (null != customerPart) {
genSerialNoModel.setCustPartNo(customerPart.getCustPartNo());
}else {
MesPcnException.throwMesBusiException("请检查客户零件信息,零件[%s]客户零件关系未维护", genSerialNoModel.getPartNo());
}
Calendar custCalendar = Calendar.getInstance();
custCalendar.setTime(new Date());
String partNo = customerPart.getCustPartNo();
String prefix = partNo.substring(0, partNo.length() - 4);
String partNo4 = partNo.substring(partNo.length() - 4).toUpperCase();
genSerialNoModel.setPartNo(prefix+partNo4);
String year = custCalendar.get(Calendar.YEAR)+"";
genSerialNoModel.setYear(year.substring(2));
genSerialNoModel.setDay(String.format("%03d",custCalendar.get(Calendar.DAY_OF_YEAR)));
return genSerialNoModel;
}
}

@ -1,8 +1,10 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print.strategy;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesCustomerPartService;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesPartService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print.IPrintTemplateStrategyService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.BarCodeUtils;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesProduceSnPrintDataModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesProduceSnPrintModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
@ -12,10 +14,7 @@ import cn.estsh.i3plus.platform.common.tool.TimeTool;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.codemaker.SnowflakeIdMaker;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesNumberRule;
import cn.estsh.i3plus.pojo.mes.bean.MesPart;
import cn.estsh.i3plus.pojo.mes.bean.MesPrintedSnLog;
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
import cn.estsh.i3plus.pojo.mes.bean.*;
import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.model.StepResult;
@ -27,6 +26,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.io.ByteArrayOutputStream;
@ -56,14 +56,21 @@ public class WuhanSnPrintStrategy implements IPrintTemplateStrategyService {
@Autowired
private ISyncFuncService syncFuncService;
@Autowired
private IMesCustomerPartService mesCustomerPartService;
@Override
public MesProduceSnPrintModel execute(GenSerialNoModel genSerialNoModel, MesProduceSnPrintModel model,
MesNumberRule numberRule, StepResult stepResult, StationRequestBean reqBean,
Boolean isStep) {
//物料信息
MesPart mesPart = mesPartService.getMesPartByPartNo(model.getPartNo(), model.getOrganizeCode());
MesCustomerPart customerPart = (!Objects.isNull(genSerialNoModel) && !CollectionUtils.isEmpty(genSerialNoModel.getDataMap()) && genSerialNoModel.getDataMap().containsKey(MesCustomerPart.class.getSimpleName())) ? (MesCustomerPart) genSerialNoModel.getDataMap().get(MesCustomerPart.class.getSimpleName()) : mesCustomerPartService.getMesCustomerPart(model.getOrganizeCode(),model.getPartNo());
if(Objects.isNull(customerPart)){
MesPcnException.throwMesBusiException("零件号:%s客户物料信息不存在",model.getPartNo());
}
// 客户零件号
String custPartNo = model.getCustPartNo();
String custPartNo = customerPart.getCustPartNo();
// 客户零件号 前缀 排除后四位
String custPartNoPrefix = StringUtils.isEmpty(custPartNo) ? "" : custPartNo.substring(0, custPartNo.length() - 4);
// 客户零件号 后四位
@ -73,6 +80,7 @@ public class WuhanSnPrintStrategy implements IPrintTemplateStrategyService {
// 返回的结果集合
List<Map<String, Object>> printDataMapList = new ArrayList<>();
if (!isStep) {
genSerialNoModel.putDataMap(MesCustomerPart.class.getSimpleName(),customerPart);
for (int i = 0; i < model.getPrintQty(); i++) {
//保存条码信息
MesProduceSn produceSn = generateMesProduceSn(mesPart, syncFuncService.syncSerialNo(genSerialNoModel, model.getUserName(), model.getOrganizeCode(), 1).getResultList().get(0).toString(), model.getUserName(), model.getQty());
@ -97,7 +105,7 @@ public class WuhanSnPrintStrategy implements IPrintTemplateStrategyService {
}
private MesNumberRule getMesNumberRule(MesPart mesPart) {
String custMatchRule = StringUtils.isEmpty(mesPart.getCustMatchRule()) ? "WH_CUST_SN_RULE" : mesPart.getCustMatchRule();
String custMatchRule = StringUtils.isEmpty(mesPart.getCustMatchRule()) ? "WH_NO_SORT_CUST_SN_RULE" : mesPart.getCustMatchRule();
DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesPart.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(custMatchRule, MesPcnExtConstWords.RULE_CODE, packBean);
return numberRuleRepository.getByProperty(packBean);

@ -39,10 +39,6 @@ public class MesNumberRuleMatchAndUniqueService implements IMesNumberRuleMatchDi
return result;
}
//验证是否离线
MesProductionAssemblyContext context = (MesProductionAssemblyContext) params[0];
if (context.getIsClosedCheck()) return result;
List<MesProductionAssemblyUnique> productionAssemblyUniqueList = assemblyExtService.getProductionAssemblyUniqueList(organizeCode, sn);
Optional<MesProductionAssemblyUnique> optional = CollectionUtils.isEmpty(productionAssemblyUniqueList) ? null :

@ -39,9 +39,7 @@ public class MesNumberRuleMatchSnService implements IMesNumberRuleMatchDispatchS
return result;
}
//验证是否离线
MesProductionAssemblyContext context = (MesProductionAssemblyContext) params[0];
if (context.getIsClosedCheck()) return result;
List<MesProduceSn> produceSnList = produceSnExtService.getProduceSnList(organizeCode, sn);
if (CollectionUtils.isEmpty(produceSnList)) {

@ -58,9 +58,6 @@ public class MesNumberRuleMatchSortDoubleCheckService implements IMesNumberRuleM
if (!(Boolean) result.get(MesPcnExtConstWords.RESULT)) return result;
}
//验证是否离线
if (context.getIsClosedCheck()) return result;
result.put(MesPcnExtConstWords.RESULT, false);
//验证零件号

@ -40,10 +40,6 @@ public class MesNumberRuleMatchSortSnGmService implements IMesNumberRuleMatchDis
return result;
}
//验证是否离线
MesProductionAssemblyContext context = (MesProductionAssemblyContext) params[0];
if (context.getIsClosedCheck()) return result;
String productSn = customerSnTransformService.transformBarCodeGm(sn);
if (productSn.length() == sn.length()) {
result.put(MesPcnExtConstWords.MESSAGE, String.format("通用自制件条码固定长度为58位,零件条码[%s]长度[%s]位!", sn, sn.length()));

@ -1,6 +1,5 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.station.function;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesConfigService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseSwsService;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.function.IFsmModuleFunctionService;
@ -24,7 +23,6 @@ import org.springframework.util.CollectionUtils;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
/**

@ -276,9 +276,9 @@ public class MesAssemblyGeneratePartNoStepService extends BaseStepService {
//前道防错
if (!StringUtils.isEmpty(filter.getProductSnId()) && !StringUtils.isEmpty(productionAssemblyNosortContext.getPreCraftCode())) {
if (CollectionUtils.isEmpty(productionRecordService.findProductionRecordList(reqBean.getOrganizeCode(), equipVariableCollectContext.getEquipVariableValue(), productionAssemblyNosortContext.getPartNo(), productionAssemblyNosortContext.getPreCraftCode()))) {
if (CollectionUtils.isEmpty(productionRecordService.findProductionRecordList(reqBean.getOrganizeCode(), equipVariableCollectContext.getEquipVariableValue(), productionAssemblyNosortContext.getAssemblyPartNo(), productionAssemblyNosortContext.getPreCraftCode()))) {
stepResult.msg(String.format("%s%s", StringUtils.isEmpty(stepResult.getMsg()) ? MesPcnExtConstWords.EMPTY : stepResult.getMsg(),
String.format("零件条码[%s]前道防错零件号[%s]工艺[%s]验证失败,未查询到加工记录信息!", equipVariableCollectContext.getEquipVariableValue(), productionAssemblyNosortContext.getPartNo(), productionAssemblyNosortContext.getPreCraftCode())));
String.format("零件条码[%s]前道防错零件号[%s]工艺[%s]验证失败,未查询到加工记录信息!", equipVariableCollectContext.getEquipVariableValue(), productionAssemblyNosortContext.getAssemblyPartNo(), productionAssemblyNosortContext.getPreCraftCode())));
continue;
}
}

@ -277,9 +277,9 @@ public class MesAssemblyMatchNosortRetrodictStepService extends BaseStepService
//前道防错
if (!StringUtils.isEmpty(filter.getProductSnId()) && !StringUtils.isEmpty(productionAssemblyNosortContext.getPreCraftCode())) {
if (CollectionUtils.isEmpty(productionRecordService.findProductionRecordList(reqBean.getOrganizeCode(), equipVariableCollectContext.getEquipVariableValue(), productionAssemblyNosortContext.getPartNo(), productionAssemblyNosortContext.getPreCraftCode()))) {
if (CollectionUtils.isEmpty(productionRecordService.findProductionRecordList(reqBean.getOrganizeCode(), equipVariableCollectContext.getEquipVariableValue(), productionAssemblyNosortContext.getAssemblyPartNo(), productionAssemblyNosortContext.getPreCraftCode()))) {
stepResult.msg(String.format("%s%s", StringUtils.isEmpty(stepResult.getMsg()) ? MesPcnExtConstWords.EMPTY : stepResult.getMsg(),
String.format("零件条码[%s]前道防错零件号[%s]工艺[%s]验证失败,未查询到加工记录信息!", equipVariableCollectContext.getEquipVariableValue(), productionAssemblyNosortContext.getPartNo(), productionAssemblyNosortContext.getPreCraftCode())));
String.format("零件条码[%s]前道防错零件号[%s]工艺[%s]验证失败,未查询到加工记录信息!", equipVariableCollectContext.getEquipVariableValue(), productionAssemblyNosortContext.getAssemblyPartNo(), productionAssemblyNosortContext.getPreCraftCode())));
continue;
}
}

@ -280,9 +280,9 @@ public class MesAssemblyMatchNosortStepService extends BaseStepService {
//前道防错
if (!StringUtils.isEmpty(filter.getProductSnId()) && !StringUtils.isEmpty(productionAssemblyNosortContext.getPreCraftCode())) {
if (CollectionUtils.isEmpty(productionRecordService.findProductionRecordList(reqBean.getOrganizeCode(), equipVariableCollectContext.getEquipVariableValue(), productionAssemblyNosortContext.getPartNo(), productionAssemblyNosortContext.getPreCraftCode()))) {
if (CollectionUtils.isEmpty(productionRecordService.findProductionRecordList(reqBean.getOrganizeCode(), equipVariableCollectContext.getEquipVariableValue(), productionAssemblyNosortContext.getAssemblyPartNo(), productionAssemblyNosortContext.getPreCraftCode()))) {
stepResult.msg(String.format("%s%s", StringUtils.isEmpty(stepResult.getMsg()) ? MesPcnExtConstWords.EMPTY : stepResult.getMsg(),
String.format("零件条码[%s]前道防错零件号[%s]工艺[%s]验证失败,未查询到加工记录信息!", equipVariableCollectContext.getEquipVariableValue(), productionAssemblyNosortContext.getPartNo(), productionAssemblyNosortContext.getPreCraftCode())));
String.format("零件条码[%s]前道防错零件号[%s]工艺[%s]验证失败,未查询到加工记录信息!", equipVariableCollectContext.getEquipVariableValue(), productionAssemblyNosortContext.getAssemblyPartNo(), productionAssemblyNosortContext.getPreCraftCode())));
continue;
}
}

@ -248,16 +248,16 @@ public class MesAssemblyMatchSortStepService extends BaseStepService {
MesProductionAssemblySortContext filter = (MesProductionAssemblySortContext) result.get(MesPcnExtConstWords.DATA);
//前道防错
if (!filter.getIsClosedCheck() && !StringUtils.isEmpty(filter.getProductSnId()) && !StringUtils.isEmpty(productionAssemblySortContext.getPreCraftCode())) {
if (CollectionUtils.isEmpty(productionRecordService.findProductionRecordList(reqBean.getOrganizeCode(), equipVariableCollectContext.getEquipVariableValue(), productionAssemblySortContext.getPartNo(), productionAssemblySortContext.getPreCraftCode()))) {
if (!StringUtils.isEmpty(filter.getProductSnId()) && !StringUtils.isEmpty(productionAssemblySortContext.getPreCraftCode())) {
if (CollectionUtils.isEmpty(productionRecordService.findProductionRecordList(reqBean.getOrganizeCode(), equipVariableCollectContext.getEquipVariableValue(), productionAssemblySortContext.getAssemblyPartNo(), productionAssemblySortContext.getPreCraftCode()))) {
stepResult.msg(String.format("%s%s", StringUtils.isEmpty(stepResult.getMsg()) ? MesPcnExtConstWords.EMPTY : stepResult.getMsg(),
String.format("零件条码[%s]前道防错零件号[%s]工艺[%s]验证失败,未查询到加工记录信息!", equipVariableCollectContext.getEquipVariableValue(), productionAssemblySortContext.getPartNo(), productionAssemblySortContext.getPreCraftCode())));
String.format("零件条码[%s]前道防错零件号[%s]工艺[%s]验证失败,未查询到加工记录信息!", equipVariableCollectContext.getEquipVariableValue(), productionAssemblySortContext.getAssemblyPartNo(), productionAssemblySortContext.getPreCraftCode())));
continue;
}
}
//时效性验证
if (!filter.getIsClosedCheck() && !StringUtils.isEmpty(filter.getProductSnId())) {
if (!StringUtils.isEmpty(filter.getProductSnId())) {
result = timeEfficientCfgMatchService.checkSnTimeliness(reqBean.getOrganizeCode(), equipVariableCollectContext.getEquipVariableValue(), filter.getSourceId(), MesExtEnumUtil.TIME_DATA_SOURCE.DATA_SOURCE10.getValue());
if (!(Boolean)result.get(MesPcnExtConstWords.RESULT)) {

@ -63,9 +63,6 @@ public class MesAssemblyReadStepService extends BaseStepService {
@Override
public StepResult init(StationRequestBean reqBean) {
//离线生产
if (mesOffLineOpen) stepExpSendMsgAndThrowEx(reqBean, new StationResultBean().writeDbLog(), "离线生产当前设备不可用!");
StepResult stepResult = StepResult.getSuccessComplete();
String endlessLoopReadTimes = fsmCommonService.handleFsmWcpcMapDataForDoScan(reqBean).get(MesPcnExtConstWords.ENDLESS_LOOP_READ_TIMES);

@ -31,8 +31,7 @@ public class MesAssemblyShowSortPreCraftStepService extends MesAssemblyShowSortS
public MesProdRuleContext getProdRuleSortContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, MesProductionPsInContext productionPsInContext) {
Map<String, MesWorkCell> workCellMap = productionProcessContextStepService.dispatchWorkCellMap(reqBean);
MesProdRuleContext prodRuleContext = new MesProdRuleContext(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), reqBean.getProcessCode(), productionProcessContext.getCraftCode())
.equipmentCode(cellEquipContext.getEquipmentCode()).workOrderNo(productionPsInContext.getWorkOrderNo()).productSn(productionPsInContext.getProductSn()).foreignKey(productionPsInContext.getForeignKey())
.isClosedCheck(mesOffLineOpen);
.equipmentCode(cellEquipContext.getEquipmentCode()).workOrderNo(productionPsInContext.getWorkOrderNo()).productSn(productionPsInContext.getProductSn()).foreignKey(productionPsInContext.getForeignKey());
return prodRuleCfgExtService.getProdRuleSortPreCraftContext(prodRuleContext, workCellMap);
}

@ -115,15 +115,13 @@ public class MesAssemblyShowSortStepService extends BaseStepService {
public MesProdRuleContext getProdRuleSortContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, MesProductionPsInContext productionPsInContext) {
MesProdRuleContext prodRuleContext = new MesProdRuleContext(
reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), reqBean.getProcessCode(), productionProcessContext.getCraftCode()).isCheckBindSeq(getIsCheckBindSeq(productionProcessContext.getWorkCell()))
.equipmentCode(cellEquipContext.getEquipmentCode()).workOrderNo(productionPsInContext.getWorkOrderNo()).productSn(productionPsInContext.getProductSn()).foreignKey(productionPsInContext.getForeignKey())
.isClosedCheck(mesOffLineOpen);
.equipmentCode(cellEquipContext.getEquipmentCode()).workOrderNo(productionPsInContext.getWorkOrderNo()).productSn(productionPsInContext.getProductSn()).foreignKey(productionPsInContext.getForeignKey());
return prodRuleCfgExtService.getProdRuleSortContext(prodRuleContext);
}
//判断是否按序扫描【离线默认有序】
//判断是否按序扫描
private Integer getIsCheckBindSeq(MesWorkCell workCell) {
if (!mesOffLineOpen) return (null != workCell && !StringUtils.isEmpty(workCell.getIsSeqScan())) ? workCell.getIsSeqScan() : CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue();
return CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue();
return (null != workCell && !StringUtils.isEmpty(workCell.getIsSeqScan())) ? workCell.getIsSeqScan() : CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue();
}
//装配件清单列表标题

@ -8,7 +8,6 @@ import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipLogDispatchContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg;
@ -20,7 +19,6 @@ import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.util.List;
@ -55,9 +53,6 @@ public class MesEquipByPassReadStepService extends BaseStepService {
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getProductionProcessContext(reqBean);
if (!productionProcessContext.getSuccess()) return stepResult.isCompleted(false);
//离线生产
if (mesOffLineOpen) return stepResult.isCompleted(false);
//当前工位使用的设备
MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip();
if (null == cellEquipContext) return stepResult.isCompleted(false);

@ -67,9 +67,6 @@ public class MesFirstMouldNoReadStepService extends BaseStepService {
@Override
public StepResult init(StationRequestBean reqBean) {
//离线生产
if (mesOffLineOpen) stepExpSendMsgAndThrowEx(reqBean, new StationResultBean().writeDbLog(), "离线生产当前设备不可用!");
//发送工步内容
productionCustomContextStepService.sendStepContextMessage(reqBean);

@ -55,9 +55,6 @@ public class MesMembraneSignalReadStepService extends BaseStepService {
@Override
public StepResult init(StationRequestBean reqBean) {
//离线生产
if (mesOffLineOpen) stepExpSendMsgAndThrowEx(reqBean, new StationResultBean().writeDbLog(), "离线生产当前设备不可用!");
//发送工步内容
productionCustomContextStepService.sendStepContextMessage(reqBean);

@ -69,9 +69,6 @@ public class MesMouldNoReadStepService extends BaseStepService {
StepResult stepResult = StepResult.getSuccessComplete();
//离线生产不读模具号
if (mesOffLineOpen) return stepResult;
StationResultBean resultBean = new StationResultBean();
//获取工步参数

@ -179,6 +179,7 @@ public class MesProdCraftRouteCheckNosortStepService extends MesProdCraftRouteCh
List<MesProductionRecord> productionRecordList = null;
//验证已完成工序最大重复次数: 如果当前工位的工序与主条码的当前工序一致的情况下, 根据条码+物料+工序+工艺查询加工记录, 判断加工记录条数
//[已完成工序最大重复次数这里判断必须大于1才进行验证的原因: 1.假如每次都进行验证会影响效率 2.即使不验证,只要当前没有配置自进自出的加工规则的情况下,后面也会拦截报错的 3.如果配置了自进自出,看实际业务是否需要自进自出,如果不需要就是配置错误,需要的话那就是允许重复扫描,那这边就应该设置大于1的值,此时就会进行重做次数验证]
if (null != optionalPs && optionalPs.isPresent() && optionalPs.get().getRepeatTimes().compareTo(MesPcnExtConstWords.ONE) > 0 && reqBean.getProcessCode().equals(productionPsInContext.getProcessCode())) {
//根据零件条码查询加工记录信息
productionRecordList = productionRecordService.findProductionRecordList(reqBean.getOrganizeCode(), productionPsInContext.getProductSn());

@ -71,9 +71,6 @@ public class MesProductResultReadStepService extends BaseStepService {
StepResult stepResult = StepResult.getSuccessComplete();
//离线生产不读加工结果
if (mesOffLineOpen) return stepResult;
StationResultBean resultBean = new StationResultBean();
//获取工步参数

@ -65,9 +65,6 @@ public class MesProductSnReadStepService extends BaseStepService {
@Override
public StepResult init(StationRequestBean reqBean) {
//离线生产
if (mesOffLineOpen) stepExpSendMsgAndThrowEx(reqBean, new StationResultBean().writeDbLog(), "离线生产当前设备不可用!");
StepResult stepResult = StepResult.getSuccessComplete();
String endlessLoopReadTimes = fsmCommonService.handleFsmWcpcMapDataForDoScan(reqBean).get(MesPcnExtConstWords.ENDLESS_LOOP_READ_TIMES);

@ -55,9 +55,6 @@ public class MesReadySignalReadStepService extends BaseStepService {
@Override
public StepResult init(StationRequestBean reqBean) {
//离线生产
if (mesOffLineOpen) stepExpSendMsgAndThrowEx(reqBean, new StationResultBean().writeDbLog(), "离线生产当前设备不可用!");
//发送工步内容
productionCustomContextStepService.sendStepContextMessage(reqBean);

@ -66,9 +66,6 @@ public class MesRecyclablePackageReadStepService extends BaseStepService {
@Override
public StepResult init(StationRequestBean reqBean) {
//离线生产
if (mesOffLineOpen) stepExpSendMsgAndThrowEx(reqBean, new StationResultBean().writeDbLog(), "离线生产当前设备不可用!");
StepResult stepResult = StepResult.getSuccessComplete();
String endlessLoopReadTimes = fsmCommonService.handleFsmWcpcMapDataForDoScan(reqBean).get(MesPcnExtConstWords.ENDLESS_LOOP_READ_TIMES);

@ -62,9 +62,6 @@ public class MesSendEquipParamsCmdStepService extends BaseStepService {
StepResult stepResult = StepResult.getSuccessComplete();
//离线生产不发送设备加工参数
if (mesOffLineOpen) return stepResult;
StationResultBean resultBean = new StationResultBean();
//获取上下文加工规则数据信息集合

@ -62,9 +62,6 @@ public class MesSendEquipParamsCmdStepService2 extends BaseStepService {
StepResult stepResult = StepResult.getSuccessComplete();
//离线生产不发送设备加工参数
if (mesOffLineOpen) return stepResult;
StationResultBean resultBean = new StationResultBean();
//获取上下文加工规则数据信息集合

@ -49,9 +49,6 @@ public class MesSendInitializationCmdStepService extends BaseStepService {
StepResult stepResult = StepResult.getSuccessComplete();
//离线生产不发送初始化指令
if (mesOffLineOpen) return stepResult;
StationResultBean resultBean = new StationResultBean();
//获取工步参数

@ -49,9 +49,6 @@ public class MesSendProcessCmdStepService extends BaseStepService {
StepResult stepResult = StepResult.getSuccessComplete();
//离线生产不发送允许加工指令
if (mesOffLineOpen) return stepResult;
StationResultBean resultBean = new StationResultBean();
//获取工步参数

@ -59,9 +59,6 @@ public class MesVariableWhenFinishedReadStepService extends BaseStepService {
StepResult stepResult = StepResult.getSuccessComplete();
//离线生产不保存工艺参数
if (mesOffLineOpen) return stepResult;
StationResultBean resultBean = new StationResultBean();
// 获取上下文信息

@ -207,11 +207,11 @@ public class MesWorkOrderCheckSortStepService extends MesWorkOrderCheckStepServi
return stepResult.isCompleted(false).msg(String.format("请检查工单工位队列信息,加工单[%s]工位队列状态[%s]", workOrderNo, MesExtEnumUtil.QUEUE_ORDER_STATUS.valueOfDescription(queueOrder.getStatus())));
//封装产成零件
MesProductionPartContext productionPartContext = new MesProductionPartContext().copyPartNo(workOrder, equipVariableCollectContextList.get(0).getMessageSource()).isClosedCheck(mesOffLineOpen).isCheck(productionProcessContext.getWorkCell());
MesProductionPartContext productionPartContext = new MesProductionPartContext().copyPartNo(workOrder, equipVariableCollectContextList.get(0).getMessageSource()).isCheck(productionProcessContext.getWorkCell());
productionPartContextList.add(productionPartContext);
//封装产品条码
productionPsInContextList.add(new MesProductionPsInContext(produceSn).isClosedCheck(mesOffLineOpen).isCheck(productionProcessContext.getWorkCell()).messageSource(equipVariableCollectContextList.get(0).getMessageSource()).relateId(queueOrder.getId()));
productionPsInContextList.add(new MesProductionPsInContext(produceSn).isCheck(productionProcessContext.getWorkCell()).messageSource(equipVariableCollectContextList.get(0).getMessageSource()).relateId(queueOrder.getId()));
//封装产出条码
productionPsOutContextList.add(new MesProductionPsOutContext().copy(produceSn));

@ -62,9 +62,6 @@ public class MesWorkOrderReadStepService extends BaseStepService {
@Override
public StepResult init(StationRequestBean reqBean) {
//离线生产
if (mesOffLineOpen) stepExpSendMsgAndThrowEx(reqBean, new StationResultBean().writeDbLog(), "离线生产当前设备不可用!");
StepResult stepResult = StepResult.getSuccessComplete();
String endlessLoopReadTimes = fsmCommonService.handleFsmWcpcMapDataForDoScan(reqBean).get(MesPcnExtConstWords.ENDLESS_LOOP_READ_TIMES);

@ -10,7 +10,6 @@ import cn.estsh.i3plus.mes.pcn.api.iservice.base.IConfigService;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.platform.common.tool.TimeTool;
import cn.estsh.i3plus.pojo.base.codemaker.SnowflakeIdMaker;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.*;
import cn.estsh.i3plus.pojo.mes.model.StationKvBean;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
@ -168,12 +167,6 @@ public class MesProductionProcessContextStepService extends BaseStepService impl
if (isCheckProcess && StringUtils.isEmpty(productionProcessContext.getProcessCode())) return productionProcessContext.message(String.format("请检查工序信息,生产线[%s]工位[%s]对应工序代码[%s]的有效性!", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), reqBean.getProcessCode()));
if (mesOffLineOpen) {
//离线生产发送设备质量信息[BAD=Red]
this.sendMessage(reqBean, new StationResultBean().busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.QUALITY_MODULE.getValue()).dataType(MesPcnEnumUtil.STATION_DATA_TYPE.COLOR.getValue()).resultObj(MesExtEnumUtil.COLOR.RED.getValue()));
if (productionProcessContext.getWorkCenter().getCenterType().compareTo(MesExtEnumUtil.WORK_CENTER_TYPE.NOSORT.getValue()) == 0) return productionProcessContext.message("离线生产仅支持排序生产线!");
}
return productionProcessContext;
}

@ -36,10 +36,8 @@ public class MesProductionProcessMonitorService extends BaseProcessMonitorServic
@Override
public Boolean doProcessComplete(StationRequestBean requestBean) {
//补DB日志 [获取开模ID赋值scanInfo] [获取上下文产出条码数据信息集合赋值resultList]
if (!mesOffLineOpen) {
writeDbLogService.doRestoreDbLog(requestBean, new StationResultBean()
.restoreDbLog().scanInfo(productionProcessContextStepService.getScanMonitorContextMouldRecordId(requestBean)).resultList(productionDispatchContextStepService.getProductionPsOutContext(requestBean)));
}
//清除上下文中的所有业务数据
productionDispatchContextStepService.flushProductionDispatchContext(requestBean);
//父类发送工序完成音

@ -154,7 +154,6 @@ public class MesAssemblySaveSortStepService extends BaseStepService {
private void saveProductionAssemblyUnique(StationRequestBean reqBean, MesProductionAssemblySortContext productionAssemblySortContext) {
if (!MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.checkUniqueRuleInDb(productionAssemblySortContext.getMatchType()) || StringUtils.isEmpty(productionAssemblySortContext.getAssemblySn())) return;
if (productionAssemblySortContext.getIsClosedCheck()) return;//离线生产不写[装配件规则唯一绑定记录表]
MesProductionAssemblyUnique productionAssemblyUnique = new MesProductionAssemblyUnique();
BeanUtils.copyProperties(productionAssemblySortContext, productionAssemblyUnique, MesPcnExtConstWords.ID);
productionAssemblyUnique.setPid(productionAssemblySortContext.getId());

@ -1,35 +0,0 @@
##\u79BB\u7EBF\u5F00\u5173
mes.offline.open = false
##\u79BB\u7EBF\u540C\u6B65\u5F00\u5173
mes.offline.sync.open = true
##\u79BB\u7EBF\u540C\u6B65\u8FB9\u7AEF\u6570\u636E\u5E93JOB
mes.offline.sync.pcnTask.taskCode = OFFLINE_DATA_SYNC_JOB
mes.offline.sync.pcnTask.taskName = OFFLINE_DATA_SYNC_JOB
mes.offline.sync.pcnTask.taskGroupName = OFFLINE_DATA_SYNC_JOB
mes.offline.sync.pcnTask.taskDescription = OFFLINE_DATA_SYNC_JOB
mes.offline.sync.pcnTask.taskClass = MesOffLineDataSyncJob
mes.offline.sync.pcnTask.taskPackage = cn.estsh.i3plus.ext.mes.pcn.apiservice.schedulejob
mes.offline.sync.pcnTask.pcnCode = PCN001
mes.offline.sync.pcnTask.taskCycleExps = 0 0/2 * * * ?
mes.offline.sync.pcnTask.taskCycleDescription = \u6BCF2\u5206\u949F\u6267\u884C\u4E00\u6B21
mes.offline.sync.pcnTask.taskParam = CR01:CH218:CH218-B
##\u79BB\u7EBF\u8FB9\u7AEF\u6570\u636E\u5E93\u914D\u7F6E
mes.offline.sync.dataSource.dsCode = impp_i3_mes_offline
mes.offline.sync.dataSource.dsName = impp_i3_mes_offline
mes.offline.sync.dataSource.dsType = SOURCE_MARIA_DB
mes.offline.sync.dataSource.dsHost = 10.193.30.20
mes.offline.sync.dataSource.dsHostPort = 3306
mes.offline.sync.dataSource.dsUser = root
mes.offline.sync.dataSource.dsPassword = (mfLEu7@9kmfdsTy
mes.offline.sync.dataSource.dsDbName = impp_i3_mes_offline
##\u79BB\u7EBF\u8BBF\u95EE\u8FB9\u7AEF\u6570\u636E\u5E93SQL\u8BED\u53E5\u5360\u4F4D\u7B26\u5BF9\u5E94\u503C
mes.offline.sync.sqlParameter.organize_code = CR01
##\u79BB\u7EBF\u8BBF\u95EE\u8FB9\u7AEF\u6570\u636E\u5E93SQL\u8BED\u53E5
##\u7EC4\u7EC7\u6A21\u578B
mes.offline.sync.sql.mes_datasource = select * from mes_datasource where organize_code = :organize_code ;

@ -1,81 +0,0 @@
##\u79BB\u7EBF\u5F00\u5173
mes.offline.open = false
##\u79BB\u7EBF\u540C\u6B65\u5F00\u5173
mes.offline.sync.open = true
##\u79BB\u7EBF\u540C\u6B65\u8FB9\u7AEF\u6570\u636E\u5E93JOB
mes.offline.sync.pcnTask.taskCode = OFFLINE_DATA_SYNC_JOB
mes.offline.sync.pcnTask.taskName = OFFLINE_DATA_SYNC_JOB
mes.offline.sync.pcnTask.taskGroupName = OFFLINE_DATA_SYNC_JOB
mes.offline.sync.pcnTask.taskDescription = OFFLINE_DATA_SYNC_JOB
mes.offline.sync.pcnTask.taskClass = MesOffLineDataSyncJob
mes.offline.sync.pcnTask.taskPackage = cn.estsh.i3plus.ext.mes.pcn.apiservice.schedulejob
mes.offline.sync.pcnTask.pcnCode = PCN001
#mes.offline.sync.pcnTask.taskCycleExps = 0 0 */1 * * ?
mes.offline.sync.pcnTask.taskCycleExps = 0 0/10 * * * ?
mes.offline.sync.pcnTask.taskCycleDescription = \u6BCF\u5C0F\u65F6\u6267\u884C\u4E00\u6B21
mes.offline.sync.pcnTask.taskParam = CR01:CH218:CH218-B
##\u79BB\u7EBF\u8FB9\u7AEF\u6570\u636E\u5E93\u914D\u7F6E
mes.offline.sync.dataSource.dsCode = impp_i3_mes
mes.offline.sync.dataSource.dsName = impp_i3_mes
mes.offline.sync.dataSource.dsType = SOURCE_MARIA_DB
mes.offline.sync.dataSource.dsHost = 10.193.30.20
mes.offline.sync.dataSource.dsHostPort = 3306
mes.offline.sync.dataSource.dsUser = root
mes.offline.sync.dataSource.dsPassword = (mfLEu7@9kmfdsTy
mes.offline.sync.dataSource.dsDbName = impp_i3_mes
##\u79BB\u7EBF\u8BBF\u95EE\u8FB9\u7AEF\u6570\u636E\u5E93SQL\u8BED\u53E5\u5360\u4F4D\u7B26\u5BF9\u5E94\u503C
mes.offline.sync.sqlParameter.organize_code = CR01
mes.offline.sync.sqlParameter.work_center_code = CH218
mes.offline.sync.sqlParameter.work_cell_code = CH218-B
##mes.offline.sync.sqlParameter.part_no_list = abc,def,ghi...
##mes.offline.sync.sqlParameter.field_int = 10
##\u79BB\u7EBF\u8BBF\u95EE\u8FB9\u7AEF\u6570\u636E\u5E93SQL\u8BED\u53E5
##\u7EC4\u7EC7\u6A21\u578B
mes.offline.sync.sql.mes_area = select * from mes_area where organize_code = :organize_code ;
mes.offline.sync.sql.mes_work_center = select * from mes_work_center where organize_code = :organize_code and work_center_code = :work_center_code ;
mes.offline.sync.sql.mes_work_cell = select * from mes_work_cell where organize_code = :organize_code and work_center_code = :work_center_code ;
##\u5DE5\u827A\u6D41\u7A0B
mes.offline.sync.sql.mes_state_machine = select * from mes_state_machine where organize_code = :organize_code and is_deleted = 2 and sm_code in (select sm_code from mes_route_process where organize_code = :organize_code and is_deleted = 2 and route_code in (select route_code from mes_route_process_cell where organize_code = :organize_code and is_deleted = 2 and work_center_code = :work_center_code and work_cell_code = :work_cell_code) and process_code in (select process_code from mes_route_process_cell where organize_code = :organize_code and is_deleted = 2 and work_center_code = :work_center_code and work_cell_code = :work_cell_code )) ;
mes.offline.sync.sql.mes_state_machine_status = select * from mes_state_machine_status where organize_code = :organize_code and is_deleted = 2 and sm_code in (select sm_code from mes_route_process where organize_code = :organize_code and is_deleted = 2 and route_code in (select route_code from mes_route_process_cell where organize_code = :organize_code and is_deleted = 2 and work_center_code = :work_center_code and work_cell_code = :work_cell_code) and process_code in (select process_code from mes_route_process_cell where organize_code = :organize_code and is_deleted = 2 and work_center_code = :work_center_code and work_cell_code = :work_cell_code )) ;
mes.offline.sync.sql.mes_step_group = select * from mes_step_group where organize_code = :organize_code and amg_id in (select trigger_amg_id from mes_state_machine_status where organize_code = :organize_code and is_deleted = 2 and sm_code in (select sm_code from mes_route_process where organize_code = :organize_code and is_deleted = 2 and route_code in (select route_code from mes_route_process_cell where organize_code = :organize_code and is_deleted = 2 and work_center_code = :work_center_code and work_cell_code = :work_cell_code) and process_code in (select process_code from mes_route_process_cell where organize_code = :organize_code and is_deleted = 2 and work_center_code = :work_center_code and work_cell_code = :work_cell_code ))) ;
mes.offline.sync.sql.mes_step = select * from mes_step where organize_code = :organize_code ;
mes.offline.sync.sql.mes_step_param = select * from mes_step_param where organize_code = :organize_code ;
mes.offline.sync.sql.mes_route = select * from mes_route where organize_code = :organize_code and is_deleted = 2 and route_code in (select route_code from mes_route_process_cell where organize_code = :organize_code and is_deleted = 2 and work_center_code = :work_center_code and work_cell_code = :work_cell_code ) ;
mes.offline.sync.sql.mes_route_process = select * from mes_route_process where organize_code = :organize_code and is_deleted = 2 and route_code in (select route_code from mes_route_process_cell where organize_code = :organize_code and is_deleted = 2 and work_center_code = :work_center_code and work_cell_code = :work_cell_code ) ;
mes.offline.sync.sql.mes_route_process_cell = select * from mes_route_process_cell where organize_code = :organize_code and is_deleted = 2 and work_center_code = :work_center_code and work_cell_code = :work_cell_code ;
mes.offline.sync.sql.mes_prod_route_cfg = select * from mes_prod_route_cfg where organize_code = :organize_code and is_deleted = 2 and work_center_code = :work_center_code ;
mes.offline.sync.sql.mes_prod_route_opt_param = select * from mes_prod_route_opt_param where organize_code = :organize_code and is_deleted = 2 and prod_route_cfg_id in (select id from mes_prod_route_cfg where organize_code = :organize_code and is_deleted = 2 and work_center_code = :work_center_code ) ;
mes.offline.sync.sql.mes_process = select * from mes_process where organize_code = :organize_code and is_deleted = 2 and process_code in (select process_code from mes_route_process_cell where organize_code = :organize_code and is_deleted = 2 and work_center_code = :work_center_code and work_cell_code = :work_cell_code ) ;
mes.offline.sync.sql.mes_craft = select * from mes_craft where organize_code = :organize_code and is_deleted = 2 and craft_code in (select craft_code from mes_process_craft_cfg where organize_code = :organize_code and is_deleted = 2 and process_code in (select process_code from mes_process where organize_code = :organize_code and is_deleted = 2 and process_code in (select process_code from mes_route_process_cell where organize_code = :organize_code and is_deleted = 2 and work_center_code = :work_center_code and work_cell_code = :work_cell_code ))) ;
mes.offline.sync.sql.mes_process_craft_cfg = select * from mes_process_craft_cfg where organize_code = :organize_code and is_deleted = 2 and process_code in (select process_code from mes_process where organize_code = :organize_code and is_deleted = 2 and process_code in (select process_code from mes_route_process_cell where organize_code = :organize_code and is_deleted = 2 and work_center_code = :work_center_code and work_cell_code = :work_cell_code )) ;
##\u7CFB\u7EDF\u914D\u7F6E
mes.offline.sync.sql.mes_config = select * from mes_config ;
##\u5DE5\u4F4D\u6309\u94AE
mes.offline.sync.sql.mes_window = select * from mes_window where organize_code = :organize_code ;
mes.offline.sync.sql.mes_window_module = select * from mes_window_module where organize_code = :organize_code ;
mes.offline.sync.sql.mes_window_module_param = select * from mes_window_module_param where organize_code = :organize_code ;
mes.offline.sync.sql.mes_work_module = select * from mes_work_module where organize_code = :organize_code ;
mes.offline.sync.sql.mes_work_module_param = select * from mes_work_module_param where organize_code = :organize_code ;
mes.offline.sync.sql.mes_work_cell_module = select * from mes_work_cell_module where organize_code = :organize_code and is_deleted = 2 and is_valid = 1 and work_center_code = :work_center_code and work_cell_code = :work_cell_code ;
##\u7269\u6599\u4FE1\u606F
mes.offline.sync.sql.mes_part = select * from mes_part where organize_code = :organize_code ;
mes.offline.sync.sql.mes_part_sap = select * from mes_part_sap where organize_code = :organize_code ;
mes.offline.sync.sql.mes_customer_part = select * from mes_customer_part where organize_code = :organize_code ;
##\u6253\u5370\u6A21\u7248
mes.offline.sync.sql.mes_label_template = select * from mes_label_template where organize_code = :organize_code and is_deleted = 2 and is_valid = 1 ;
mes.offline.sync.sql.mes_label_template_param = select * from mes_label_template_param where organize_code = :organize_code and is_deleted = 2 and is_valid = 1 ;
##\u7F16\u7801\u89C4\u5219
mes.offline.sync.sql.mes_number_rule = select * from mes_number_rule where organize_code = :organize_code and is_deleted = 2 and is_valid = 1 ;
##\u6392\u5E8F\u4EA7\u54C1\u52A0\u5DE5\u89C4\u5219
mes.offline.sync.sql.mes_prod_rule_sort_cfg = select * from mes_prod_rule_sort_cfg where organize_code = :organize_code and work_center_code = :work_center_code and work_cell_code = :work_cell_code ;

@ -60,10 +60,6 @@ public class MesProdRuleContext implements Serializable {
@ApiParam(name = "是否验证装配件扫描顺序")
private Integer isCheckBindSeq;
//默认开启防错, true代表关闭防错
@ApiParam(name = "是否关闭防错")
private Boolean isClosedCheck = false;
//-------以下非排序属性-------------
@ApiParam("非排序产品加工规则ID")
@ -134,12 +130,6 @@ public class MesProdRuleContext implements Serializable {
return this;
}
//赋值系统配置【离线开关】
public MesProdRuleContext isClosedCheck(Boolean isClosedCheck) {
this.isClosedCheck = isClosedCheck;
return this;
}
//非排序无须使用工位的字段,直接使用非排序产品加工规则的字段;
//排序使用工位的字段, 如果是显示前道所有装配件场景下在装配件清单中单独标记各个工位的装配件是否需要顺序扫描
public MesProdRuleContext isCheckBindSeq(Integer isSeqScan) {

@ -124,10 +124,6 @@ public class MesProductionAssemblyContext implements Serializable {
@ApiParam("匹配时间")
public String matchDatetime;
//默认开启防错, true代表关闭防错
@ApiParam(name = "是否关闭防错")
public Boolean isClosedCheck = false;
public String repeatKeyToString() {
if (StringUtils.isEmpty(this.equipmentCode) || StringUtils.isEmpty(this.matchType) || (StringUtils.isEmpty(this.matchRule) && StringUtils.isEmpty(this.assemblyPartNo))) return null;
return String.format("%s:%s&%s:%s&%s:%s&%s:%s",

@ -247,10 +247,4 @@ public class MesProductionAssemblySortContext extends MesProductionAssemblyConte
private void matchDatetime() { this.matchDatetime = (new SimpleDateFormat(MesPcnExtConstWords.DATE_FORMAT_SSS)).format(new Date()); }
//赋值系统配置【离线开关】
public MesProductionAssemblySortContext isClosedCheck(Boolean isClosedCheck) {
this.isClosedCheck = isClosedCheck;
return this;
}
}

@ -106,10 +106,6 @@ public class MesProductionPartContext implements Serializable {
@ApiParam("工艺强过码")
private String craftJumpCode;
//默认开启防错, true代表关闭防错
@ApiParam(name = "是否关闭防错")
private Boolean isClosedCheck = false;
//默认否
@ApiParam("是否顺序防错")
private Integer isCheckSeq = CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue();
@ -188,14 +184,7 @@ public class MesProductionPartContext implements Serializable {
return this;
}
//赋值系统配置【离线开关】
public MesProductionPartContext isClosedCheck(Boolean isClosedCheck) {
this.isClosedCheck = isClosedCheck;
return this;
}
public MesProductionPartContext isCheck(MesWorkCell workCell) {
if (isClosedCheck) return this;
if(!StringUtils.isEmpty(workCell.getIsCheckSeq()) && workCell.getIsCheckSeq().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) this.isCheckSeq = workCell.getIsCheckSeq();
return this;
}

@ -80,10 +80,6 @@ public class MesProductionPsInContext implements Serializable {
@ApiParam("是否空腔")
private Integer isFinishCode = CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue();
//默认开启防错, true代表关闭防错
@ApiParam(name = "是否关闭防错")
private Boolean isClosedCheck = false;
//默认否
@ApiParam(name = "是否前道工艺防错")
private Integer isCheckCraft = CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue();
@ -115,14 +111,7 @@ public class MesProductionPsInContext implements Serializable {
return this;
}
//赋值系统配置【离线开关】
public MesProductionPsInContext isClosedCheck(Boolean isClosedCheck) {
this.isClosedCheck = isClosedCheck;
return this;
}
public MesProductionPsInContext isCheck(MesWorkCell workCell) {
if (isClosedCheck) return this;
if(!StringUtils.isEmpty(workCell.getIsCheckCraft()) && workCell.getIsCheckCraft().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) this.isCheckCraft = workCell.getIsCheckCraft();
return this;
}

Loading…
Cancel
Save