forked from I3-YF/i3plus-mes-pcn-yfai
生产开模统计job
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…
Reference in New Issue