42796 【上线】工单需求变更

tags/yfai-mes-ext-v1.7
jun 8 months ago
parent 70ae73d026
commit bbc3a0362f

@ -28,10 +28,10 @@ public interface IMesWorkOrderService extends IBaseMesService<MesWorkOrder> {
void doProductReportExt(MesWorkOrder mesWorkOrder);
@ApiOperation("非排序工单导入前删除")
void deleteUnSortOrder(String organizeCode, List<String> partNoList);
void deleteUnSortOrder(String organizeCode, List<String> partNoList,String userName);
@ApiOperation("汇总工单给SAP")
List<MesWorkOrderModel> sumMesWorkOrderQtyToSap(String organizeCode,String lastSendToSapTime);
List<MesWorkOrderModel> sumMesWorkOrderQtyToSap(String organizeCode);
@ApiOperation("ccscTest")
List<MesWorkOrder> queryMesWorkOrderProcessToSap(String organizeCode);

@ -13,7 +13,6 @@ import java.util.List;
* @Modify:
**/
public interface IMesWorkOrderToSapService extends IBaseMesService<MesWorkOrderToSap> {
MesWorkOrderToSap insert(MesWorkOrderModel mesWorkOrder);
void doMesWorkOrder(String organizeCode,String userName,List<MesWorkOrderModel> mesWorkOrderList);
}

@ -82,14 +82,6 @@ public class MesWorkOrderController extends BaseMesController<MesWorkOrder> {
}
String userName = AuthUtil.getSessionUser().getUserName();
String organizeCode = AuthUtil.getOrganize().getOrganizeCode();
//非排序工单导入前删除
if (MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue() == type) {
List<String> partNoList = beanList.stream().map(MesWorkOrderModel::getPartNo).filter(partNo -> !StringUtils.isEmpty(partNo)).distinct().collect(Collectors.toList());
if(CollectionUtils.isEmpty(partNoList)){
MesException.throwMesBusiException("导入物料信息数据无效");
}
mesWorkOrderService.deleteUnSortOrder(organizeCode,partNoList);
}
List<MesWorkOrder> mesWorkOrderList = new ArrayList<>();
// 导入数据初始化
for (MesWorkOrderModel bean : beanList) {
@ -159,17 +151,8 @@ public class MesWorkOrderController extends BaseMesController<MesWorkOrder> {
@ApiOperation(value = "发送给sap")
public ResultBean sendToSap(String organizeCode) {
try {
MesConfig sendToSap = mesConfigService.getCfgValueByCode(organizeCode, "LAST_SEND_TO_SAP_TIME");
String lastSendToSapTime = null;
if (Objects.isNull(sendToSap) || StringUtils.isEmpty(sendToSap.getCfgValue())) {
lastSendToSapTime = TimeTool.pareDateToString(new Date(0));
} else {
lastSendToSapTime = sendToSap.getCfgValue();
sendToSap.setCfgValue(TimeTool.pareDateToString(DateUtil.addMinutes(new Date(), -10)));
mesConfigService.update(sendToSap, "");
}
//查询汇总工单数量
List<MesWorkOrderModel> mesWorkOrderList = mesWorkOrderService.sumMesWorkOrderQtyToSap(organizeCode,lastSendToSapTime);
List<MesWorkOrderModel> mesWorkOrderList = mesWorkOrderService.sumMesWorkOrderQtyToSap(organizeCode);
if (!CollectionUtils.isEmpty(mesWorkOrderList)){
mesWorkOrderToSapService.doMesWorkOrder(organizeCode,"",mesWorkOrderList);
}

@ -13,5 +13,5 @@ import java.util.List;
**/
public interface IMesWorkOrderDao {
List<MesWorkOrderModel> sumMesWorkOrderQtyToSap(String organizeCode, List<Integer> statusList,List<String> partNoList);
List<MesWorkOrderModel> sumMesWorkOrderQtyToSap(String organizeCode);
}

@ -2,6 +2,7 @@ package cn.estsh.i3plus.ext.mes.apiservice.daoimpl;
import cn.estsh.i3plus.ext.mes.apiservice.dao.IMesWorkOrderDao;
import cn.estsh.i3plus.ext.mes.apiservice.utils.BeanUtil;
import cn.estsh.i3plus.platform.common.tool.TimeTool;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.mes.model.MesWorkOrderModel;
import lombok.extern.slf4j.Slf4j;
@ -31,18 +32,17 @@ public class MesWorkOrderDaoImpl implements IMesWorkOrderDao {
private EntityManager entityManager;
@Override
public List<MesWorkOrderModel> sumMesWorkOrderQtyToSap(String organizeCode, List<Integer> statusList,List<String> partNoList) {
StringBuffer hql = new StringBuffer("select organize_Code as organizeCode,part_No as partNo, date_format(plan_start_time, '%Y-%m-%d' ) as planStartTime, product_Version as productVersion, " +
" sum( CASE WHEN work_Order_Status = 40 THEN complete_Qty ELSE qty END ) AS qty " +
" from Mes_Work_Order where is_Deleted=:isDeleted and is_Valid = :isValid and organize_Code = :organizeCode " +
" and work_order_type = 20 and order_flag !='P' and part_no in (:partNoList) "+
" and work_Order_Status not in(:statusList) group by organize_code,part_No, date_format(plan_start_time, '%Y-%m-%d' ), product_Version ");
public List<MesWorkOrderModel> sumMesWorkOrderQtyToSap(String organizeCode) {
StringBuffer hql = new StringBuffer("select organize_code as organizeCode,part_no as partNo, date_format(plan_start_time, '%Y-%m-%d' ) as planStartTime, product_version as productVersion, " +
" sum(case when work_order_status = 40 then complete_qty else qty end ) as qty " +
" from mes_work_order where is_deleted=:isDeleted and is_valid = :isValid and organize_code = :organizeCode " +
" and work_order_type = 20 and order_flag !='P' and work_order_status != 10 and plan_start_time >= :today" +
" group by organize_code,part_no, date_format(plan_start_time, '%Y-%m-%d' ), product_version ");
Query query = entityManager.createNativeQuery(hql.toString());
query.setParameter("organizeCode", organizeCode);
query.setParameter("isValid", CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
query.setParameter("isDeleted", CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
query.setParameter("statusList", statusList);
query.setParameter("partNoList", partNoList);
query.setParameter("today", TimeTool.getToday());
query.unwrap(SQLQuery.class).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
List<HashMap<String, Object>> hashMaps = query.getResultList();

@ -0,0 +1,57 @@
package cn.estsh.i3plus.ext.mes.apiservice.schedulejob;
import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderService;
import cn.estsh.i3plus.mes.apiservice.schedulejob.BaseMesScheduleJob;
import cn.estsh.impp.framework.boot.init.ApplicationProperties;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
import org.quartz.DisallowConcurrentExecution;
import org.quartz.JobExecutionContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
/**
* @Description :
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/8/28 9:52
* @Modify:
**/
@DisallowConcurrentExecution
@ApiOperation("工单关闭")
public class MesWorkOrderCloseOrderJob extends BaseMesScheduleJob {
public static final Logger LOGGER = LoggerFactory.getLogger(MesWorkOrderCloseOrderJob.class);
@Autowired
private IMesWorkOrderService mesWorkOrderService;
public MesWorkOrderCloseOrderJob() {
super(MesWorkOrderCloseOrderJob.class, "工单关闭");
this.setMultiInstance(true);
}
@Override
public void executeMesJob(JobExecutionContext context, ApplicationProperties applicationProperties) {
try {
String jobParam = this.getJobParam();
if (StringUtils.isBlank(jobParam)) {
throw new IllegalArgumentException("job参数为空请检查参数");
}
String[] organizeCodeList = jobParam.split(",");
LOGGER.info("工单关闭开始 -----start");
String userName = "CLOSE_JOB";
for (String organizeCode : organizeCodeList) {
mesWorkOrderService.deleteUnSortOrder(organizeCode, null, userName);
}
LOGGER.info("工单关闭开始结束 ----- end");
} catch (Exception e) {
LOGGER.error("工单关闭任务结束e:{}", e.toString());
}
}
}

@ -71,16 +71,7 @@ public class MesWorkOrderToSapJob extends BaseMesScheduleJob {
String userName = "job";
for (String organizeCode : organizeCodeList) {
MesConfig sendToSap = mesConfigService.getCfgValueByCode(organizeCode,"LAST_SEND_TO_SAP_TIME");
String lastSendToSapTime = null;
if(Objects.isNull(sendToSap) || StringUtils.isEmpty(sendToSap.getCfgValue())){
lastSendToSapTime = TimeTool.pareDateToString(new Date(0));
}else{
lastSendToSapTime = sendToSap.getCfgValue();
sendToSap.setCfgValue(TimeTool.pareDateToString(DateUtil.addMinutes(new Date(), -10)));
mesConfigService.update(sendToSap,userName);
}
List<MesWorkOrderModel> mesWorkOrderList = mesWorkOrderService.sumMesWorkOrderQtyToSap(organizeCode,lastSendToSapTime);
List<MesWorkOrderModel> mesWorkOrderList = mesWorkOrderService.sumMesWorkOrderQtyToSap(organizeCode);
if (!CollectionUtils.isEmpty(mesWorkOrderList)) {
mesWorkOrderToSapService.doMesWorkOrder(organizeCode,userName, mesWorkOrderList);
}

@ -150,10 +150,6 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
baseRDao.insert(copyMesWorkOrder);
workOrderLogService.saveMesWorkOrderLog(copyMesWorkOrder,MesExtEnumUtil.WORK_ORDER_LOG_TYPE.INSERT,copyMesWorkOrder.getQty());
return bean;
}else if (bean.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue()){
//生产工单-非排序手工插单,关闭该零件当天之前日期非排序工单
List<String> partNoList = Collections.singletonList(bean.getPartNo());
this.deleteUnSortOrder(bean.getOrganizeCode(),partNoList);
} else if (bean.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.BTO.getValue()) {
Long produceSeq = 0L;
if (null != result && result.getProduceSeq() != null) {
@ -351,6 +347,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
ValidatorBean.checkNotNull(item.getProductVersion(), "生产版本不能为空");
//校验物料生产版本是否存在
MesProductVersion mesProductVersion = checkMesProductVersion(item);
item.setErpWorkCenter(mesProductVersion.getWorkCenterCode());
//获取bom信息
List<MesBom> bomList = mesBomService.findMesBomByPartNoAndBomVersion(item.getPartNo(), item.getOrganizeCode(), mesProductVersion.getAlternativePartList());
//发送工单信息给WMS
@ -751,6 +748,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
MesException.throwMesBusiException("物料【%s】生产版本【%s】信息不存在", item.getPartNo(), item.getProductVersion());
}
MesProductVersion mesProductVersion = versionList.iterator().next();
item.setErpWorkCenter(mesProductVersion.getWorkCenterCode());
//获取bom信息
if (mesBomMap.containsKey(item.getPartNo() + mesProductVersion.getAlternativePartList())) {
mesBomList = mesBomMap.get(item.getPartNo() + mesProductVersion.getAlternativePartList());
@ -1036,14 +1034,14 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
}
@Override
public void deleteUnSortOrder(String organizeCode, List<String> partNoList) {
public void deleteUnSortOrder(String organizeCode, List<String> partNoList,String userName) {
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);
baseRDao.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "workOrderStatus"},
new Object[]{"CLOSE_JOB", TimeTool.getNowTime(true), MesExtEnumUtil.ORDER_STATUS.CLOSE.getValue()}, ddlPackBean);
new Object[]{userName, TimeTool.getNowTime(true), MesExtEnumUtil.ORDER_STATUS.CLOSE.getValue()}, ddlPackBean);
}
@ -1271,21 +1269,9 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
}
@Override
public List<MesWorkOrderModel> sumMesWorkOrderQtyToSap(String organizeCode,String lastSendToSapTime) {
List<Integer> statusList = new ArrayList<>();
statusList.add(MesExtEnumUtil.ORDER_STATUS.CREATE.getValue());
// statusList.add(MesExtEnumUtil.ORDER_STATUS.CLOSE.getValue());
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue(),MesExtConstWords.WORK_ORDER_TYPE,packBean);
DdlPreparedPack.getStringNoEqualPack(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue(),"orderFlag",packBean);
DdlPreparedPack.getNotInPack(statusList, MesExtConstWords.WORK_ORDER_STATUS, packBean);
DdlPreparedPack.getStringBiggerPack(lastSendToSapTime,"modifyDatetime",packBean);
List<MesWorkOrder> mesWorkOrderList = mesWorkOrderRDao.findByHqlWhere(packBean);
if(CollectionUtils.isEmpty(mesWorkOrderList)) return null;
List<String> partNoList = mesWorkOrderList.stream().map(MesWorkOrder::getPartNo).filter(partNo -> !StringUtil.isEmptyAndNull(partNo)).distinct().collect(Collectors.toList());
if(CollectionUtils.isEmpty(partNoList)) return null;
public List<MesWorkOrderModel> sumMesWorkOrderQtyToSap(String organizeCode) {
//查询汇总工单数量
return mesWorkOrderDao.sumMesWorkOrderQtyToSap(organizeCode, statusList,partNoList);
return mesWorkOrderDao.sumMesWorkOrderQtyToSap(organizeCode);
}
@Override

@ -19,50 +19,14 @@ import java.util.stream.Collectors;
public class MesWorkOrderToSapServiceImpl extends BaseMesService<MesWorkOrderToSap> implements IMesWorkOrderToSapService {
@Override
public MesWorkOrderToSap insert(MesWorkOrderModel mesWorkOrder) {
MesWorkOrderToSap mesWorkOrderToSap = new MesWorkOrderToSap(mesWorkOrder.getOrganizeCode(),
mesWorkOrder.getOrganizeCode(), mesWorkOrder.getPartNo(), mesWorkOrder.getProductVersion(),
mesWorkOrder.getQty(), mesWorkOrder.getPlanStartTime());
ConvertBean.serviceModelUpdate(mesWorkOrderToSap,mesWorkOrder.getModifyUser());
return baseRDao.insert(mesWorkOrderToSap);
}
@Override
public void doMesWorkOrder(String organizeCode,String userName,List<MesWorkOrderModel> mesWorkOrderList) {
//查询表里原有数据
Map<String, MesWorkOrderToSap> workOrderToSapMap = getStringMesWorkOrderToSapMap(organizeCode, mesWorkOrderList);
List<MesWorkOrderToSap> mesWorkOrderToSapList = new ArrayList<>();
//数据处理
for (MesWorkOrderModel mesWorkOrder : mesWorkOrderList) {
String key = new StringJoiner(MesExtConstWords.COMMA).add(mesWorkOrder.getPartNo()).add(mesWorkOrder.getPlanStartTime()).toString();
mesWorkOrder.setModifyUser(userName);
//计划开始时间+物料查询发送Sap的数据
if(!workOrderToSapMap.containsKey(key)){
insert(mesWorkOrder);
}else{
if(!Objects.equals(workOrderToSapMap.get(key).getGsmng(),mesWorkOrder.getQty())){
insert(mesWorkOrder);
}
}
}
}
private Map<String, MesWorkOrderToSap> getStringMesWorkOrderToSapMap(String organizeCode, List<MesWorkOrderModel> mesWorkOrderList) {
List<String> partNoList = mesWorkOrderList.stream().map(MesWorkOrderModel::getPartNo).distinct().collect(Collectors.toList());
List<String> planStartTime = mesWorkOrderList.stream().map(MesWorkOrderModel::getPlanStartTime).distinct().collect(Collectors.toList());
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getInPackList(planStartTime,"pedtr",ddlPackBean);
DdlPreparedPack.getInPackList(partNoList,"plmat",ddlPackBean);
ddlPackBean.setOrderByStr(" order by createDatetime desc ");
List<MesWorkOrderToSap> workOrderToSapList = baseRDao.findByHqlWhere(ddlPackBean);
Map<String,MesWorkOrderToSap> workOrderToSapMap = new HashMap<>();
if(!CollectionUtils.isEmpty(workOrderToSapList)){
for (MesWorkOrderToSap mesWorkOrderToSap : workOrderToSapList) {
String key = new StringJoiner(MesExtConstWords.COMMA).add(mesWorkOrderToSap.getPlmat()).add(mesWorkOrderToSap.getPedtr()).toString();
if(!workOrderToSapMap.containsKey(key)){
workOrderToSapMap.put(key,mesWorkOrderToSap);
}
}
MesWorkOrderToSap orderToSap = new MesWorkOrderToSap(mesWorkOrder.getOrganizeCode(), mesWorkOrder.getPartNo(), mesWorkOrder.getProductVersion(), mesWorkOrder.getQty(), mesWorkOrder.getPlanStartTime());
ConvertBean.serviceModelUpdate(orderToSap,userName);
mesWorkOrderToSapList.add(orderToSap);
}
return workOrderToSapMap;
baseRDao.saveAll(mesWorkOrderToSapList);
}
}

Loading…
Cancel
Save