tags/yfai-mes-ext-v1.0
gsz 10 months ago
commit 5374bf371b

@ -0,0 +1,17 @@
package cn.estsh.i3plus.ext.mes.api.base;
import cn.estsh.i3plus.pojo.mes.bean.MesCorssOrganizeErrorProofing;
import io.swagger.annotations.ApiOperation;
/**
* @Description :
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/7/4 16:49
* @Modify:
**/
public interface IMesCorssOrganizeErrorProofingService extends IBaseMesService<MesCorssOrganizeErrorProofing> {
@ApiOperation("跨工厂防错JOB")
void doMesCorssOrganizeErrorProofing(String organizeCode ,Integer pageSize,String userName);
}

@ -0,0 +1,20 @@
package cn.estsh.i3plus.ext.mes.apiservice.controller.base;
import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.pojo.mes.bean.MesCorssOrganizeErrorProofing;
import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @Description :
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/7/4 16:48
* @Modify:
**/
@Api(tags = "跨工厂防错")
@RestController
@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesCorssOrganizeErrorProofing")
public class MesCorssOrganizeErrorProofingController extends BaseMesController<MesCorssOrganizeErrorProofing> {
}

@ -8,7 +8,6 @@ import cn.estsh.i3plus.platform.common.tool.TimeTool;
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.MesProduceSn;
import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord;
import cn.estsh.i3plus.pojo.mes.bean.MesShift;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder;
@ -66,6 +65,10 @@ public class MesWhiteListController extends MesBaseController {
private IMesQmsScrapService qmsScrapService;
@Autowired
private IMesQmsSuspiciousService qmsSuspiciousService;
@Autowired
private IMesCorssOrganizeErrorProofingService mesCorssOrganizeErrorProofingService;
@PostMapping(value = "/meter/main-data")
@ApiOperation(value = "Maximo仪表主数据", notes = "Maximo仪表主数据")
public Map doMeterMainData(@RequestBody MaximoParamModel paramModel) {
@ -110,6 +113,20 @@ public class MesWhiteListController extends MesBaseController {
return ResultBean.success().setSuccess(true);
}
@GetMapping(value = "/doMesCorssOrganizeErrorProofing")
@ApiOperation(value = "跨工厂防错JOB")
public ResultBean doMesCorssOrganizeErrorProofing(String organizeCode, Integer pageSize) {
//统计数据
try {
mesCorssOrganizeErrorProofingService.doMesCorssOrganizeErrorProofing(organizeCode, pageSize, "job");
} catch (ImppBusiException imppException) {
return ResultBean.fail(imppException);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
return ResultBean.success("执行成功");
}
@GetMapping("/reportWorkByPreDayJob")
@ApiOperation(value = "job测试")
public ResultBean queryReworkTaskByPager(String organizeCode) {

@ -0,0 +1,20 @@
package cn.estsh.i3plus.ext.mes.apiservice.dao;
import cn.estsh.i3plus.pojo.mes.bean.MesCorssOrganizeErrorProofing;
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
import io.swagger.annotations.ApiOperation;
import java.util.List;
/**
* @Description :
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/7/4 18:03
* @Modify:
**/
public interface IMesCorssOrganizeErrorProofingDao {
@ApiOperation("根据工厂物料,查询产品条码信息")
List<MesProduceSn> findMesProduceSnByOrganizeCodeAndPart(MesCorssOrganizeErrorProofing mesCorssOrganizeErrorProofing, Integer pageSize);
}

@ -0,0 +1,52 @@
package cn.estsh.i3plus.ext.mes.apiservice.daoimpl;
import cn.estsh.i3plus.ext.mes.apiservice.dao.IMesCorssOrganizeErrorProofingDao;
import cn.estsh.i3plus.platform.common.tool.TimeTool;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesCorssOrganizeErrorProofing;
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import java.util.Date;
import java.util.List;
/**
* @Description :
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/7/4 17:59
* @Modify:
**/
@Service
public class MesCorssOrganizeErrorProofingDaoImpl implements IMesCorssOrganizeErrorProofingDao {
@Autowired
private EntityManager entityManager;
@Override
public List<MesProduceSn> findMesProduceSnByOrganizeCodeAndPart(MesCorssOrganizeErrorProofing mesCorssOrganizeErrorProofing, Integer pageSize) {
String sql = "select srcSn from MesProduceSn srcSn left join MesProduceSn destSn on srcSn.serialNumber = destSn.serialNumber " +
" and destSn.organizeCode=:destOrganizeCode and destSn.isDeleted=:isDeleted and destSn.isValid = :isValid " +
" where srcSn.createDatetime >= :createDatetime and srcSn.organizeCode = :srcOrganizeCode " +
" and srcSn.isDeleted=:isDeleted and srcSn.isValid = :isValid and srcSn.partNo = :partNo " +
" and srcSn.snStatus in (10,20) and srcSn.qcStatus in (10,15) and destSn.serialNumber is null " +
" order by srcSn.createDatetime asc";
Query query = entityManager.createQuery(sql, MesProduceSn.class);
query.setParameter("srcOrganizeCode", mesCorssOrganizeErrorProofing.getSrcOrganizeCode());
query.setParameter("destOrganizeCode", mesCorssOrganizeErrorProofing.getOrganizeCode());
query.setParameter("isValid", CommonEnumUtil.VALID);
query.setParameter("isDeleted", CommonEnumUtil.FALSE);
query.setParameter("partNo", mesCorssOrganizeErrorProofing.getPartNo());
if (StringUtils.isEmpty(mesCorssOrganizeErrorProofing.getLastCreateDatetime())) {
query.setParameter("createDatetime", TimeTool.pareDateToString(new Date(0)));
} else {
query.setParameter("createDatetime", mesCorssOrganizeErrorProofing.getLastCreateDatetime());
}
query.setFirstResult(0).setMaxResults(pageSize);
return query.getResultList();
}
}

@ -0,0 +1,57 @@
package cn.estsh.i3plus.ext.mes.apiservice.schedulejob;
import cn.estsh.i3plus.ext.mes.api.base.IMesCorssOrganizeErrorProofingService;
import cn.estsh.i3plus.mes.apiservice.schedulejob.BaseMesScheduleJob;
import cn.estsh.i3plus.platform.common.tool.JsonUtilTool;
import cn.estsh.i3plus.pojo.model.wms.WmsJobParamModel;
import cn.estsh.impp.framework.boot.init.ApplicationProperties;
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 java.util.List;
/**
* @Description : JOB
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/7/5 11:07
* @Modify:
**/
@Slf4j
@DisallowConcurrentExecution
@Component
@ApiOperation("跨工厂防错JOB")
public class MesCorssOrganizeErrorProofingJob extends BaseMesScheduleJob {
@Autowired
private IMesCorssOrganizeErrorProofingService mesCorssOrganizeErrorProofingService;
public MesCorssOrganizeErrorProofingJob() {
super(MesCorssOrganizeErrorProofingJob.class, "跨工厂防错JOB");
}
@Override
public void executeMesJob(JobExecutionContext context, ApplicationProperties applicationProperties) {
List<WmsJobParamModel> wmsJobParamModelList = JsonUtilTool.toList(this.getJobParam(), WmsJobParamModel.class);
if (!CollectionUtils.isEmpty(wmsJobParamModelList)) {
for (WmsJobParamModel wmsJobParamModel : wmsJobParamModelList) {
//统计数据
try {
long startTime = System.currentTimeMillis();
mesCorssOrganizeErrorProofingService.doMesCorssOrganizeErrorProofing(wmsJobParamModel.getOrganizeCode(), wmsJobParamModel.getPageSize(), "job");
long endTime = System.currentTimeMillis();
log.info("工厂{}跨工厂防错job --- END --- 耗时: {} ms", wmsJobParamModel.getOrganizeCode(), endTime - startTime);
} catch (Exception e) {
log.info("工厂{}跨工厂防错job 执行失败{}", wmsJobParamModel.getOrganizeCode(), e);
}
}
}
}
}

@ -0,0 +1,137 @@
package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base;
import cn.estsh.i3plus.ext.mes.api.base.IMesCorssOrganizeErrorProofingService;
import cn.estsh.i3plus.ext.mes.apiservice.dao.IMesCorssOrganizeErrorProofingDao;
import cn.estsh.i3plus.ext.mes.apiservice.unit.exception.MesException;
import cn.estsh.i3plus.mes.apiservice.util.DateUtil;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.platform.common.tool.TimeTool;
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.MesCorssOrganizeErrorProofing;
import cn.estsh.i3plus.pojo.mes.bean.MesCorssOrganizeErrorProofingLog;
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
import cn.estsh.i3plus.pojo.mes.repository.IMesCorssOrganizeErrorProofingLogRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesProduceSnRepository;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import cn.estsh.impp.framework.boot.util.ValidatorBean;
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 java.util.ArrayList;
import java.util.List;
/**
* @Description :
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/7/4 16:50
* @Modify:
**/
@Service
@Slf4j
public class MesCorssOrganizeErrorProofingServiceImpl extends BaseMesService<MesCorssOrganizeErrorProofing> implements IMesCorssOrganizeErrorProofingService {
@Autowired
private IMesCorssOrganizeErrorProofingDao mesCorssOrganizeErrorProofingDao;
@Autowired
private MesProduceSnRepository mesProduceSnRepository;
@Autowired
private IMesCorssOrganizeErrorProofingLogRepository mesCorssOrganizeErrorProofingLogRepository;
@Override
protected void setPackQueryBean(MesCorssOrganizeErrorProofing bean, DdlPackBean packBean) {
DdlPreparedPack.getStringEqualPack(bean.getSrcOrganizeCode(), "srcOrganizeCode", packBean);
DdlPreparedPack.getStringLikerPack(bean.getPartNo(), "partNo", packBean);
DdlPreparedPack.getStringLikerPack(bean.getPartName(), "partName", packBean);
}
@Override
protected void onInsertBean(MesCorssOrganizeErrorProofing item) {
// 数据校验
checkData(item);
DdlPackBean packBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(item.getSrcOrganizeCode(), "srcOrganizeCode", packBean);
DdlPreparedPack.getStringLikerPack(item.getPartNo(), "partNo", packBean);
if (baseRDao.isExitByHql(packBean)) {
MesException.throwMesBusiException("源工厂代码【%s】物料【%s】数据已存在", item.getSrcOrganizeCode(), item.getPartNo());
}
}
@Override
protected void onUpdateBean(MesCorssOrganizeErrorProofing item) {
// 数据校验
checkData(item);
DdlPackBean packBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(item.getSrcOrganizeCode(), "srcOrganizeCode", packBean);
DdlPreparedPack.getStringLikerPack(item.getPartNo(), "partNo", packBean);
DdlPreparedPack.getNumNOEqualPack(item.getId(), "id", packBean);
if (baseRDao.isExitByHql(packBean)) {
MesException.throwMesBusiException("源工厂代码【%s】物料【%s】数据已存在", item.getSrcOrganizeCode(), item.getPartNo());
}
}
@Override
public void doMesCorssOrganizeErrorProofing(String organizeCode, Integer pageSize, String userName) {
List<MesCorssOrganizeErrorProofing> corssOrganizeErrorProofingList = baseRDao.findByHqlWhere(DdlPackBean.getDdlPackBean(organizeCode));
if (CollectionUtils.isEmpty(corssOrganizeErrorProofingList)) {
return;
}
//循环处理数据
for (MesCorssOrganizeErrorProofing organizeErrorProofing : corssOrganizeErrorProofingList) {
//查询待同步的数据
List<MesProduceSn> produceSnList = mesCorssOrganizeErrorProofingDao.findMesProduceSnByOrganizeCodeAndPart(organizeErrorProofing, pageSize);
int transSize = 0;
if (!CollectionUtils.isEmpty(produceSnList)) {
//插入条码
insertMesProduceSn(organizeErrorProofing, produceSnList);
//最后同步条码创建时间
String createDatetime = produceSnList.get(produceSnList.size() - 1).getCreateDatetime();
organizeErrorProofing.setLastCreateDatetime(TimeTool.pareDateToString(DateUtil.addMinutes(TimeTool.parseDate(createDatetime), -10)));
transSize = produceSnList.size();
}
organizeErrorProofing.setLastExeTime(TimeTool.getNowTime(true));
//更新数据
baseRDao.update(organizeErrorProofing);
//保存记录
saveLog(userName, organizeErrorProofing, transSize);
}
}
private void checkData(MesCorssOrganizeErrorProofing item) {
ValidatorBean.checkNotNull(item.getSrcOrganizeCode(), "源工厂代码不能为空");
ValidatorBean.checkNotNull(item.getPartNo(), "零件号不能为空");
if (item.getSrcOrganizeCode().equalsIgnoreCase(item.getOrganizeCode())) {
MesException.throwMesBusiException("源工厂代码不能和目标工厂代码一样");
}
}
private void saveLog(String userName, MesCorssOrganizeErrorProofing organizeErrorProofing, int transSize) {
MesCorssOrganizeErrorProofingLog mesCorssOrganizeErrorProofingLog = new MesCorssOrganizeErrorProofingLog();
BeanUtils.copyProperties(organizeErrorProofing, mesCorssOrganizeErrorProofingLog, "id");
mesCorssOrganizeErrorProofingLog.setTransSize(transSize);
ConvertBean.serviceModelInitialize(mesCorssOrganizeErrorProofingLog, userName);
mesCorssOrganizeErrorProofingLogRepository.insert(mesCorssOrganizeErrorProofingLog);
}
private void insertMesProduceSn(MesCorssOrganizeErrorProofing organizeErrorProofing, List<MesProduceSn> produceSnList) {
//数据持久化
for (MesProduceSn produceSn : produceSnList) {
MesProduceSn saveDbProduceSn = new MesProduceSn();
BeanUtils.copyProperties(produceSn, saveDbProduceSn, "id");
saveDbProduceSn.setOrganizeCode(organizeErrorProofing.getOrganizeCode());
saveDbProduceSn.setSnType(MesExtEnumUtil.PRODUCE_SN_TYPE.CORSS_ORGANIZE.getValue());
saveDbProduceSn.setDescription(produceSn.getOrganizeCode());
saveDbProduceSn.setSystemSyncStatus(CommonEnumUtil.FALSE);
mesProduceSnRepository.insert(saveDbProduceSn);
}
}
}

@ -32,7 +32,7 @@ public class MesPartProdGroupService extends BaseMesService<MesPartProdGroup> im
public List<MesPartProdGroup> findMesPartProdGroup(MesPartProdGroupDetail mesPartProdGroupDetail){
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(mesPartProdGroupDetail.getOrganizeCode());
DdlPreparedPack.getStringLikerPack(mesPartProdGroupDetail.getPartNo(),"partNo",ddlPackBean);
DdlPreparedPack.getStringEqualPack(mesPartProdGroupDetail.getPartNo(),"partNo",ddlPackBean);
DdlPreparedPack.getStringEqualPack(mesPartProdGroupDetail.getWorkCenterCode(),"workCenterCode",ddlPackBean);
List<MesPartProdGroupDetail> mesPartProdGroupDetails = mesPartProdGroupDetailRDao.findByHqlWhere(ddlPackBean);
if(CollectionUtils.isEmpty(mesPartProdGroupDetails)){

@ -73,12 +73,20 @@ public class MesModuleExcelServiceImpl extends BaseMesService<MesModuleExcel> im
if (moduleExcelManageDb == null) {
MesException.throwMesBusiException("ID【%s】记录不存在", mesModuleExcel.getId());
}
//校验数据是否存在
DdlPackBean packBean = MesExtHqlPack.getAllBaseData(mesModuleExcel.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(mesModuleExcel.getModuleCode(), MesExtConstWords.MODULE_CODE, packBean);
DdlPreparedPack.getNumNOEqualPack(mesModuleExcel.getId(), "id", packBean);
if(baseRDao.isExitByHql(packBean)){
MesException.throwMesBusiException("模块代码【%s】数据已存在", mesModuleExcel.getModuleCode());
}
//改变文件时清除fileUrl
if (StringUtils.isEmpty(mesModuleExcel.getFileUrl())) {
MesFile mesFile = getMesFile(file, mesModuleExcel);
moduleExcelManageDb.setFileId(mesFileRDao.insert(mesFile).getId());
}
moduleExcelManageDb.setModuleCode(mesModuleExcel.getModuleCode());
moduleExcelManageDb.setModuleName(mesModuleExcel.getModuleName());
ConvertBean.serviceModelUpdate(moduleExcelManageDb, mesModuleExcel.getModifyUser());
baseRDao.update(moduleExcelManageDb);

@ -277,6 +277,8 @@ public class IMesYfBoardServiceImpl implements IMesYfBoardService {
//最新的点检单结果为 NOK
//结果设置为“异常”
resultModel.setInspectionResults(MesExtEnumUtil.INSPECTION_RESULTS.ABNORMAL.getValue());
} else {
resultModel.setInspectionResults(MesExtEnumUtil.INSPECTION_RESULTS.NOT_DONE.getValue());
}
}else {
//不存在该种点检类型的点检单数据

Loading…
Cancel
Save