生产开模统计job

tags/yfai-pcn-ext-v1.0
jun 11 months ago
parent 3f4f041c5e
commit e04184acca

@ -0,0 +1,13 @@
package cn.estsh.i3plus.ext.mes.pcn.api.busi;
/**
* @Description :
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/6/26 16:32
* @Modify:
**/
public interface IMesProdMouldStatisticsService {
void doSumMesProdMouldStatistics(String organizeCode, Integer pageSize, String userName);
}

@ -0,0 +1,24 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.dao;
import cn.estsh.i3plus.pojo.mes.bean.MesProdMouldRecord;
import io.swagger.annotations.ApiOperation;
import java.util.List;
/**
* @Description :
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/6/26 15:46
* @Modify:
**/
public interface IMesProdMouldStatisticsDao {
@ApiOperation("查询未统计的开模记录数据")
List<MesProdMouldRecord> findUndStatisticsMesProdMouldRecord(String organizeCode, Integer pageSize);
@ApiOperation("更新加工记录表")
int updateMesProductionRecord(List<Long> idList, String organizeCode, boolean updateSyncStatus,String userName);
}

@ -0,0 +1,68 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.daoimpl;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.dao.IMesProdMouldStatisticsDao;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.platform.common.tool.TimeTool;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesProdMouldRecord;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import java.util.List;
import java.util.Objects;
/**
* @Description :
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/6/26 15:46
* @Modify:
**/
@Service
public class MesProdMouldStatisticsDaoImpl implements IMesProdMouldStatisticsDao {
@Autowired
private EntityManager entityManager;
@Override
public List<MesProdMouldRecord> findUndStatisticsMesProdMouldRecord(String organizeCode, Integer pageSize) {
StringBuilder sql = new StringBuilder();
sql.append(" select pmr from MesMouldMappingCfg mmc left join MesProdMouldRecord pmr on mmc.equipmentCode = pmr.equipmentCode");
sql.append(" where mmc.organizeCode = :organizeCode and mmc.isDeleted = :isDeleted and mmc.isValid = :isValid ");
sql.append(" and pmr.organizeCode = :organizeCode and pmr.isDeleted = :isDeleted and pmr.isValid = :isValid ");
sql.append(" and (pmr.assetNum is null or pmr.assetNum = '') order by pmr.createDatetime asc");
Query query = entityManager.createQuery(sql.toString(), MesProdMouldRecord.class);
query.setParameter("organizeCode", organizeCode);
query.setParameter("isValid", CommonEnumUtil.VALID);
query.setParameter("isDeleted", CommonEnumUtil.FALSE);
if (!Objects.isNull(pageSize)) {
query.setFirstResult(MesPcnExtConstWords.ZERO).setMaxResults(pageSize);
}
return query.getResultList();
}
@Override
public int updateMesProductionRecord(List<Long> idList, String organizeCode, boolean updateSyncStatus, String userName) {
StringBuilder sql = new StringBuilder();
sql.append(" update MesProductionRecord set moduleStatisticsStatus = :moduleStatisticsStatus,modifyUser = :modifyUser");
if (updateSyncStatus) {
sql.append(",systemSyncStatus = :systemSyncStatus,modifyDatetime = :modifyDatetime");
}
sql.append(" where organizeCode = :organizeCode and isDeleted = :isDeleted and isValid = :isValid ");
sql.append(" and id in (:idList) ");
Query query = entityManager.createQuery(sql.toString());
query.setParameter("organizeCode", organizeCode);
query.setParameter("isValid", CommonEnumUtil.VALID);
query.setParameter("isDeleted", CommonEnumUtil.FALSE);
query.setParameter("ids", idList);
query.setParameter("moduleStatisticsStatus", CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
query.setParameter("modifyUser", userName);
if (updateSyncStatus) {
query.setParameter("systemSyncStatus", CommonEnumUtil.FALSE);
query.setParameter("modifyDatetime", TimeTool.getNowTime(true));
}
return query.executeUpdate();
}
}

@ -0,0 +1,51 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.schedulejob;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProdMouldStatisticsService;
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/6/26 18:22
* @Modify:
**/
@Slf4j
@DisallowConcurrentExecution
@Component
@ApiOperation("生产开模统计job")
public class MesProdMouldStatisticsJob extends BaseMesScheduleJob {
@Autowired
private IMesProdMouldStatisticsService mesProdMouldStatisticsService;
public MesProdMouldStatisticsJob() {
super(MesProdMouldStatisticsJob.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) {
long startTime = System.currentTimeMillis();
mesProdMouldStatisticsService.doSumMesProdMouldStatistics(wmsJobParamModel.getOrganizeCode(), wmsJobParamModel.getPageSize(), "job");
long endTime = System.currentTimeMillis();
log.info("工厂{}生产开模统计job --- END --- 耗时: {} ms", wmsJobParamModel.getOrganizeCode(), endTime - startTime);
}
}
}
}

@ -0,0 +1,148 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProdMouldStatisticsService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.dao.IMesProdMouldStatisticsDao;
import cn.estsh.i3plus.mes.pcn.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.MesMouldMappingCfg;
import cn.estsh.i3plus.pojo.mes.bean.MesProdMouldRecord;
import cn.estsh.i3plus.pojo.mes.bean.MesProdMouldStatistics;
import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord;
import cn.estsh.i3plus.pojo.mes.repository.IMesMouldMappingCfgRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesProdMouldRecordRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesProdMouldStatisticsRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesProductionRecordRepository;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import lombok.extern.slf4j.Slf4j;
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;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* @Description :
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/6/26 16:32
* @Modify:
**/
@Service
@Slf4j
public class MesProdMouldStatisticsServiceImpl implements IMesProdMouldStatisticsService {
@Autowired
private IMesProdMouldStatisticsDao mesProdMouldStatisticsDao;
@Autowired
private IMesMouldMappingCfgRepository mesMouldMappingCfgRDao;
@Autowired
private MesProductionRecordRepository mesProductionRecordRDao;
@Autowired
private MesProdMouldRecordRepository mesProdMouldRecordRDao;
@Autowired
private MesProdMouldStatisticsRepository mesProdMouldStatisticsRDao;
@Override
public void doSumMesProdMouldStatistics(String organizeCode, Integer pageSize, String userName) {
//查询未统计的开模记录数据
List<MesProdMouldRecord> undStatisticsMesProdMouldRecordList = mesProdMouldStatisticsDao.findUndStatisticsMesProdMouldRecord(organizeCode, pageSize);
if (CollectionUtils.isEmpty(undStatisticsMesProdMouldRecordList)) {
return;
}
Map<String, List<MesProdMouldRecord>> undStatisticsMesProdMouldRecordMap = undStatisticsMesProdMouldRecordList.stream().collect(Collectors.groupingBy(MesProdMouldRecord::getEquipmentCode));
//查询加工记录表
Map<Long, List<MesProductionRecord>> productionRecordMap = getProductionRecordMap(organizeCode, undStatisticsMesProdMouldRecordList.stream().map(MesProdMouldRecord::getId).collect(Collectors.toList()));
//数据处理
List<MesProductionRecord> mesProductionRecordList = new ArrayList<>();
for (MesMouldMappingCfg mesMouldMappingCfg : getMesMouldMappingCfgs(organizeCode, new ArrayList<>(undStatisticsMesProdMouldRecordMap.keySet()))) {
List<MesProdMouldRecord> mesProdMouldRecords = undStatisticsMesProdMouldRecordMap.get(mesMouldMappingCfg.getEquipmentCode());
//更新开模记录数据
mesProdMouldRecords.forEach(mesProdMouldRecord -> {
if (!Objects.isNull(productionRecordMap) && productionRecordMap.containsKey(mesProdMouldRecord.getId())) {
mesProductionRecordList.addAll(productionRecordMap.get(mesProdMouldRecord.getId()));
}
mesProdMouldRecord.setAssetNum(mesMouldMappingCfg.getAssetNum());
mesProdMouldRecord.setMeterName(mesMouldMappingCfg.getMeterName());
mesProdMouldRecord.setSystemSyncStatus(CommonEnumUtil.FALSE);
ConvertBean.serviceModelUpdate(mesProdMouldRecord, userName);
});
mesProdMouldRecordRDao.saveAll(mesProdMouldRecords);
//生产开模统计
saveMesProdMouldStatistics(organizeCode, userName, mesMouldMappingCfg, mesProdMouldRecords);
}
//更新加工记录表状态
if (!CollectionUtils.isEmpty(mesProductionRecordList)) {
List<Long> noUpdateSyncStatusId = mesProductionRecordList.stream().filter(t -> MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue() == t.getReportStatus()).map(MesProductionRecord::getId).collect(Collectors.toList());
List<Long> updateSyncStatusId = mesProductionRecordList.stream().filter(t -> MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue() != t.getReportStatus()).map(MesProductionRecord::getId).collect(Collectors.toList());
if (!CollectionUtils.isEmpty(noUpdateSyncStatusId)) {
mesProdMouldStatisticsDao.updateMesProductionRecord(noUpdateSyncStatusId, organizeCode, false, userName);
}
if (!CollectionUtils.isEmpty(updateSyncStatusId)) {
mesProdMouldStatisticsDao.updateMesProductionRecord(updateSyncStatusId, organizeCode, true, userName);
}
}
}
private void saveMesProdMouldStatistics(String organizeCode, String userName, MesMouldMappingCfg mesMouldMappingCfg, List<MesProdMouldRecord> mesProdMouldRecords) {
Map<String, List<MesProdMouldRecord>> mesProdMouldRecordMap = mesProdMouldRecords.stream().collect(Collectors.groupingBy(t -> TimeTool.parseStringFormat(t.getCreateDatetime(), null, DateUtil.SHORT_FORMAT)));
Map<String, MesProdMouldStatistics> mouldStatisticsMap = getMesProdMouldStatistics(organizeCode, mesMouldMappingCfg.getAssetNum(), mesMouldMappingCfg.getMeterName());
for (Map.Entry<String, List<MesProdMouldRecord>> mesProdMouldRecordEntry : mesProdMouldRecordMap.entrySet()) {
if (Objects.isNull(mouldStatisticsMap) || !mouldStatisticsMap.containsKey(mesProdMouldRecordEntry.getKey())) {
MesProdMouldStatistics mesProdMouldStatistic = new MesProdMouldStatistics();
mesProdMouldStatistic.setWorkDate(mesProdMouldRecordEntry.getKey());
mesProdMouldStatistic.setAssetNum(mesMouldMappingCfg.getAssetNum());
mesProdMouldStatistic.setMeterName(mesMouldMappingCfg.getMeterName());
mesProdMouldStatistic.setQty(mesProdMouldRecordEntry.getValue().size());
mesProdMouldStatistic.setOrganizeCode(organizeCode);
ConvertBean.serviceModelInitialize(mesProdMouldStatistic, userName);
mesProdMouldStatisticsRDao.insert(mesProdMouldStatistic);
} else {
MesProdMouldStatistics prodMouldStatistics = mouldStatisticsMap.get(mesProdMouldRecordEntry.getKey());
prodMouldStatistics.setQty(prodMouldStatistics.getQty() + mesProdMouldRecordEntry.getValue().size());
prodMouldStatistics.setSystemSyncStatus(CommonEnumUtil.FALSE);
ConvertBean.serviceModelUpdate(prodMouldStatistics, userName);
mesProdMouldStatisticsRDao.update(prodMouldStatistics);
}
}
}
private Map<String, MesProdMouldStatistics> getMesProdMouldStatistics(String organizeCode, String assetNum, String meterName) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(assetNum, "assetNum", packBean);
DdlPreparedPack.getStringEqualPack(meterName, "meterName", packBean);
List<MesProdMouldStatistics> mesProdMouldStatistics = mesProdMouldStatisticsRDao.findByHqlWhere(packBean);
if (!CollectionUtils.isEmpty(mesProdMouldStatistics)) {
return mesProdMouldStatistics.stream().collect(Collectors.toMap(MesProdMouldStatistics::getWorkDate, t -> t));
}
return null;
}
private List<MesMouldMappingCfg> getMesMouldMappingCfgs(String organizeCode, List<String> equipmentCodeList) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getInPackList(equipmentCodeList, "equipmentCode", packBean);
List<MesMouldMappingCfg> mesMouldMappingCfgs = mesMouldMappingCfgRDao.findByHqlWhere(packBean);
return mesMouldMappingCfgs;
}
private Map<Long, List<MesProductionRecord>> getProductionRecordMap(String organizeCode, List<Long> idList) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getInPackList(idList, "mouldRecordId", packBean);
List<MesProductionRecord> productionRecordList = mesProductionRecordRDao.findByHqlWhere(packBean);
if (!CollectionUtils.isEmpty(productionRecordList)) {
return productionRecordList.stream().collect(Collectors.groupingBy(MesProductionRecord::getMouldRecordId));
}
return null;
}
}
Loading…
Cancel
Save