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

# Conflicts:
#	modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBtoJobServiceImpl.java
tags/yfai-mes-ext-v2.3
jun 6 months ago
commit d59c8cd91e

@ -24,9 +24,12 @@ public interface IMesCustSoftInfoService extends IBaseMesService<MesCustSortInfo
*/
List<MesCustSortInfo> queryCustSortInfoList(String custCode,String custOrganizeCode,String infoPointCode,String organizeCode,List<String> custPartNoList);
List<MesCustSortInfo> queryAllCustSortInfoList(String organizeCode);
/**
* custSortInfo
* @param custSortInfo
*/
void updateCustSortInfo(MesCustSortInfo custSortInfo);
void updateMsgCustSortInfo(MesCustSortInfo custSortInfo);
}

@ -1,9 +1,6 @@
package cn.estsh.i3plus.ext.mes.apiservice.controller.busi;
import cn.estsh.i3plus.ext.mes.apiservice.schedulejob.MesAccountJob;
import cn.estsh.i3plus.ext.mes.apiservice.schedulejob.MesDowntimeRecordJob;
import cn.estsh.i3plus.ext.mes.apiservice.schedulejob.MesGenerateAccountJob;
import cn.estsh.i3plus.ext.mes.apiservice.schedulejob.MesWorkOrderUpdateQtyJob;
import cn.estsh.i3plus.ext.mes.apiservice.schedulejob.*;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
@ -27,6 +24,9 @@ public class TestController {
@Autowired
private MesDowntimeRecordJob mesDowntimeRecordJob;
@Autowired
private MesQmsScrapJob mesQmsScrapJob;
@GetMapping("/reportOrder")
@ApiOperation(value = "报工")
public void reportOrder() {
@ -51,4 +51,11 @@ public class TestController {
public void mesDowntimeRecordJob() {
mesDowntimeRecordJob.executeMesJob(null, null);
}
@GetMapping("/mesQmsScrap")
@ApiOperation(value = "mesQmsScrap")
public void mesQmsScrap() {
mesQmsScrapJob.executeMesJob(null, null);
}
}

@ -20,6 +20,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.text.SimpleDateFormat;
@ -35,6 +36,7 @@ import java.util.List;
**/
@DisallowConcurrentExecution
@ApiOperation("MES_QMS报废品汇总Job")
@Service
public class MesQmsScrapJob extends BaseMesScheduleJob {
public static final Logger LOGGER = LoggerFactory.getLogger(MesQmsScrapJob.class);
@ -74,17 +76,19 @@ public class MesQmsScrapJob extends BaseMesScheduleJob {
DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.PART_INSPECTION_STATUS.FAIL.getValue(), "inspectionStatus", packBean);
DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.PART_INSPECTION_NC_STATUS.SCRAP.getValue(), "ncStatus", packBean);
//查同步标识为3的数据如果接口映射同步则更新为1
DdlPreparedPack.getNumEqualPack(3, "systemSyncStatus", packBean);
DdlPreparedPack.getNumNOEqualPack(1, "systemSyncStatus", packBean);
DdlPreparedPack.timeBuilder(
new SimpleDateFormat("yyyy-MM-dd").format(TimeTool.getDateBefore(new Date(), 1)) + " 00:00:00",
TimeTool.getToday() + " 00:00:00", "createDatetime", packBean, true);
List<MesPartInspection> mesPartInspectionList = partInspectionRepository.findByHqlWhere(packBean);
if (!CollectionUtils.isEmpty(mesPartInspectionList)) {
LOGGER.info("一共需要汇总{}条报废数据2", mesPartInspectionList.size());
qmsScrapService.doQmsScrapByPartInspection(mesPartInspectionList, organizeCode);
for (MesPartInspection mesPartInspection : mesPartInspectionList) {
mesPartInspection.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
mesPartInspection.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
// ConvertBean.serviceModelUpdate(mesPartInspection, MesExtConstWords.JOB);
}
partInspectionRepository.saveAll(mesPartInspectionList);

@ -2,17 +2,18 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base;
import cn.estsh.i3plus.ext.mes.api.base.IMesBtoJobService;
import cn.estsh.i3plus.ext.mes.api.base.strategy.IRoundnessStrategy;
import cn.estsh.i3plus.ext.mes.apiservice.config.AuthUtilExt;
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.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesCustomerMessagePoint;
import cn.estsh.i3plus.pojo.mes.bean.MesPartProdGroup;
import cn.estsh.i3plus.pojo.mes.bean.MesPartProdGroupDetail;
import cn.estsh.i3plus.pojo.mes.bean.MesPartProdGroupWindowTime;
import cn.estsh.i3plus.pojo.mes.bean.*;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesCustSortInfo;
import cn.estsh.i3plus.pojo.mes.repository.MesCustSoftInfoRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesCustomerPartRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesPartProdGroupWindowTimeRepository;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import cn.estsh.impp.framework.boot.auth.AuthUtil;
import cn.estsh.impp.framework.boot.util.SpringContextsUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@ -41,7 +42,8 @@ public class MesBtoJobServiceImpl implements IMesBtoJobService {
@Autowired
private MesCustSoftInfoServiceImpl mesCustSoftInfoService;
@Autowired
private MesCustSoftInfoRepository mesCustSoftInfoRepository;
@Autowired
private MesPartProdGroupWindowTimeRepository windowTimeRao;
@ -50,6 +52,9 @@ public class MesBtoJobServiceImpl implements IMesBtoJobService {
public void doCreateBto(String organizeCode, List<String> groupCodeList) {
//1. 根据 organizeCode 和 groupCodeList 查询零件生产组
List<MesPartProdGroup> mesPartProdGroups = mesPartProdGroupService.findMesPartProdGroups(organizeCode, groupCodeList);
// 初始找原因
updateCustsort(organizeCode, mesPartProdGroups);
for (MesPartProdGroup prodGroup : mesPartProdGroups) {
//2. 根据生产组的infoPointCode 获取 过点信息MES_CUSTOMER_MESSAGE_POINT
MesCustomerMessagePoint messagePoint = mesCustomerMessagePointService.getPointByCode(prodGroup.getCustInfoPoint(),organizeCode);
@ -66,6 +71,9 @@ public class MesBtoJobServiceImpl implements IMesBtoJobService {
List<String> custPartNoList = details.stream().map(MesPartProdGroupDetail::getCustPartNo).collect(Collectors.toList());
List<MesCustSortInfo> sortInfoList = mesCustSoftInfoService.queryCustSortInfoList(prodGroup.getCustCode(), prodGroup.getCustOrganizeCode(), prodGroup.getCustInfoPoint(), organizeCode, custPartNoList);
// List<MesCustSortInfo> allSortInfoList = mesCustSoftInfoService.queryAllCustSortInfoList(organizeCode);
//6. 根据零件生产组的RoundnessType 去做策略,现在只做 窗口时间 策略; 入参
String roundnessService = MesExtEnumUtil.SHIPPING_GROUP_ROUND_METHOD.valueOfService(prodGroup.getRoundMethod());
if (sortInfoList.isEmpty()){
@ -122,6 +130,23 @@ public class MesBtoJobServiceImpl implements IMesBtoJobService {
}
private void updateCustsort(String organizeCode, List<MesPartProdGroup> mesPartProdGroups) {
List<MesPartProdGroupDetail> allDetails = new ArrayList<>();
for (MesPartProdGroup prodGroup : mesPartProdGroups) {
List<MesPartProdGroupDetail> details = mesPartProdGroupService.findDetailByCode(prodGroup.getPartProdGroupCode(), organizeCode);
allDetails.addAll(details);
}
List<String> allCustPartNoList = allDetails.stream().map(MesPartProdGroupDetail::getCustPartNo).distinct().collect(Collectors.toList());
List<MesCustSortInfo> allCustSortInfoList = mesCustSoftInfoService.queryAllCustSortInfoList(organizeCode);
for (MesCustSortInfo mesCustSortInfo : allCustSortInfoList) {
if (!allCustPartNoList.contains(mesCustSortInfo.getCustPartNo())) {
String msg = String.format("客户零件号:%s,零件号:%s,未配置零件生产组明细", mesCustSortInfo.getCustPartNo(), mesCustSortInfo.getErpPartNo());
mesCustSortInfo.setDescription(msg);
}
}
mesCustSoftInfoRepository.saveAll(allCustSortInfoList);
}
/**
*
* @param infoPointCode

@ -33,10 +33,25 @@ public class MesCustSoftInfoServiceImpl extends BaseMesService<MesCustSortInfo>
}
@Override
public List<MesCustSortInfo> queryAllCustSortInfoList(String organizeCode) {
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getNumEqualPack(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(),"serviceFlag", ddlPackBean);
return baseRDao.findByHqlWhere(ddlPackBean);
}
@Override
public void updateCustSortInfo(MesCustSortInfo custSortInfo) {
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(custSortInfo.getOrganizeCode());
DdlPreparedPack.getNumEqualPack(custSortInfo.getId(),"id",ddlPackBean);
baseRDao.updateByProperties(new String[]{"serviceFlag","modifyUser","modifyDatetime"},new Object[]{CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(),"edi", TimeTool.getNowTime(true)},ddlPackBean);
baseRDao.updateByPropertiesNoSync(new String[]{"serviceFlag","modifyUser","modifyDatetime"},new Object[]{CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(),"edi", TimeTool.getNowTime(true)},ddlPackBean);
}
@Override
public void updateMsgCustSortInfo(MesCustSortInfo custSortInfo) {
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(custSortInfo.getOrganizeCode());
DdlPreparedPack.getNumEqualPack(custSortInfo.getId(),"id",ddlPackBean);
baseRDao.updateByProperties(new String[]{"description","modifyUser","modifyDatetime"},new Object[]{custSortInfo.getDescription(),"edi", TimeTool.getNowTime(true)},ddlPackBean);
}
}

@ -46,6 +46,9 @@ public class MesQmsScrapService extends BaseMesService<MesQmsScrap> implements I
//43326 电子化检验发送给QMS的数据按照零件号+责任人类型分组发送
Map<String, List<MesPartInspection>> workOrderPartMap = mesPartInspectionList.stream().collect(Collectors.groupingBy(p -> p.getPartNo() +"="+p.getResponsibleParty()));
//根据物料对可疑品分组
List<MesQmsScrap> qmsScrapList = new ArrayList<>();
log.info("一共需要汇总{}条报废数据2", workOrderPartMap.size());
for (Map.Entry<String, List<MesPartInspection>> stringListEntry : workOrderPartMap.entrySet()) {
String keyPartNo = stringListEntry.getKey().split("=")[0];
List<MesPartInspection> mesPartInspections = stringListEntry.getValue();
@ -69,8 +72,10 @@ public class MesQmsScrapService extends BaseMesService<MesQmsScrap> implements I
mesQmsScrap.setReponsibilityId(next.getResponsibleParty());
mesQmsScrap.setNcJudger(next.getModifyUser());
ConvertBean.serviceModelInitialize(mesQmsScrap, "MesScrapJob");
baseRDao.insert(mesQmsScrap);
qmsScrapList.add(mesQmsScrap);
}
log.info("一共需要汇总{}条报废数据3", qmsScrapList.size());
baseRDao.saveAll(qmsScrapList);
}
}

@ -9,6 +9,7 @@ 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.base.util.StringUtil;
import cn.estsh.i3plus.pojo.mes.bean.*;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesCustSortInfo;
import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel;
@ -112,11 +113,28 @@ public class MesTimeRoundnessService implements IRoundnessStrategy {
//看看多少倍乘以圆整数量就是需求数QTY就是多累积数
multiple = (int) Math.round(Math.ceil(Math.ceil(qty / roundQty)));
}
if (StringUtil.isEmpty(detail.getProductPartNo())) {
String msg = String.format("零件生生产组:%s,客户零件号:%s没有配置生产零件号", detail.getPartProdGroupName(), detail.getCustPartNo());
log.info("零件生生产组:{},客户零件号:{}s没有配置生产零件号", partProdGroup.getPartProdGroupName(), detail.getCustPartNo());
//更新 custSortInfo 状态已解析
for (MesCustSortInfo sortInfo : sortInfos) {
sortInfo.setDescription(msg);
custSoftInfoService.updateMsgCustSortInfo(sortInfo);
}
continue;
}
//获取生产零件信息
MesPartSap mesPartSap = getMesPart(detail.getProductPartNo(), detail.getOrganizeCode());
if (mesPartSap.getId() == null) {
String msg = String.format("零件生生产组:%s,生产零件:%s找不到对应的零件信息", partProdGroup.getPartProdGroupName(), detail.getProductPartNo());
log.info("零件生生产组:{},生产零件:{}找不到对应的零件信息", partProdGroup.getPartProdGroupName(), detail.getProductPartNo());
//更新 custSortInfo 状态已解析
for (MesCustSortInfo sortInfo : sortInfos) {
sortInfo.setDescription(msg);
custSoftInfoService.updateMsgCustSortInfo(sortInfo);
}
continue;
// throw ImppExceptionBuilder.newInstance().setErrorDetail("零件生成组零件:{}找不到对应的零件信息", detail.getProductPartNo()).build();
}
@ -152,7 +170,8 @@ public class MesTimeRoundnessService implements IRoundnessStrategy {
DdlPreparedPack.getStringEqualPack(detail.getWorkCenterCode(), "workCenterCode", workCenterPackBean);
List<MesWorkCenter> centerList = mesWorkCenterRao.findByHqlWhere(workCenterPackBean);
if (!centerList.isEmpty()) {
mesWorkOrder.setErpWorkCenter(centerList.get(0).getErpWorkCenter());
// 2024-10-30 BTO的工作中心需要用生产版本的工作中心而不是取的产线
//mesWorkOrder.setErpWorkCenter(centerList.get(0).getErpWorkCenter());
}
//产线
mesWorkOrder.setWorkCenterCode(detail.getWorkCenterCode());
@ -210,6 +229,7 @@ public class MesTimeRoundnessService implements IRoundnessStrategy {
}else {
String productVersion = prodVersion.getProductVersion();
mesWorkOrder.setProductVersion(productVersion);
mesWorkOrder.setErpWorkCenter(prodVersion.getWorkCenterCode());
}
// 14.bomCode partNo + 生产版本+ organizeCode
// 数量

Loading…
Cancel
Save