发送sap生产计划逻辑变更

tags/yfai-mes-ext-v1.0
jun 1 year ago
parent 5fc061f2f9
commit 9767bd5af5

@ -2,6 +2,8 @@ package cn.estsh.i3plus.ext.mes.api.base;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder;
import java.util.List;
/** /**
* @Description: * @Description:
* @CreateDate 2024/04/16 * @CreateDate 2024/04/16
@ -10,4 +12,6 @@ import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder;
public interface IMesWorkOrderService extends IBaseMesService<MesWorkOrder> { public interface IMesWorkOrderService extends IBaseMesService<MesWorkOrder> {
void doProductReport(MesWorkOrder mesWorkOrder); void doProductReport(MesWorkOrder mesWorkOrder);
List<MesWorkOrder> sumMesWorkOrderQtyToSap(String organizeCode);
} }

@ -3,6 +3,8 @@ package cn.estsh.i3plus.ext.mes.api.base;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderToSap; import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderToSap;
import java.util.List;
/** /**
* @Description : * @Description :
* @Reference : * @Reference :
@ -12,4 +14,6 @@ import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderToSap;
**/ **/
public interface IMesWorkOrderToSapService extends IBaseMesService<MesWorkOrderToSap> { public interface IMesWorkOrderToSapService extends IBaseMesService<MesWorkOrderToSap> {
MesWorkOrderToSap insert(MesWorkOrder mesWorkOrder); MesWorkOrderToSap insert(MesWorkOrder mesWorkOrder);
void doMesWorkOrder(String organizeCode,List<MesWorkOrder> mesWorkOrderList);
} }

@ -1,6 +1,7 @@
package cn.estsh.i3plus.ext.mes.apiservice.controller.base; package cn.estsh.i3plus.ext.mes.apiservice.controller.base;
import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderService; import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderService;
import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderToSapService;
import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.excel.MesExcelTool; import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.excel.MesExcelTool;
import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.convert.ConvertBean;
@ -14,6 +15,7 @@ import cn.estsh.impp.framework.boot.util.ResultBean;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
@ -27,6 +29,9 @@ public class MesWorkOrderController extends BaseMesController<MesWorkOrder> {
@Autowired @Autowired
private IMesWorkOrderService mesWorkOrderService; private IMesWorkOrderService mesWorkOrderService;
@Autowired
private IMesWorkOrderToSapService mesWorkOrderToSapService;
@PostMapping(value = "/import-mes-work-order") @PostMapping(value = "/import-mes-work-order")
@ApiOperation(value = "导入数据") @ApiOperation(value = "导入数据")
public ResultBean importMesWorkOrderExcel(@RequestParam("file") MultipartFile file, Integer type) { public ResultBean importMesWorkOrderExcel(@RequestParam("file") MultipartFile file, Integer type) {
@ -74,4 +79,24 @@ public class MesWorkOrderController extends BaseMesController<MesWorkOrder> {
} }
@GetMapping(value = "/sendToSap")
@ApiOperation(value = "发送给sap")
public ResultBean sendToSap(String organizeCode) {
try {
//查询汇总工单数量
List<MesWorkOrder> mesWorkOrderList = mesWorkOrderService.sumMesWorkOrderQtyToSap(organizeCode);
if (!CollectionUtils.isEmpty(mesWorkOrderList)){
mesWorkOrderToSapService.doMesWorkOrder(organizeCode,mesWorkOrderList);
}
return ResultBean.success("操作成功")
.setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
} catch (ImppBusiException e) {
return ResultBean.fail(e).build();
} catch (Exception e) {
return ResultBean.fail(e);
}
}
} }

@ -0,0 +1,17 @@
package cn.estsh.i3plus.ext.mes.apiservice.dao;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder;
import java.util.List;
/**
* @Description : SAP
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/5/7 15:13
* @Modify:
**/
public interface IMesWorkOrderDao {
List<MesWorkOrder> sumMesWorkOrderQtyToSap(String organizeCode,List<Integer> statusList);
}

@ -0,0 +1,40 @@
package cn.estsh.i3plus.ext.mes.apiservice.daoimpl;
import cn.estsh.i3plus.ext.mes.apiservice.dao.IMesWorkOrderDao;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import java.util.List;
/**
* @Description :SAP
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/5/6 15:52
* @Modify:
**/
@Service
@Slf4j
public class MesWorkOrderDaoImpl implements IMesWorkOrderDao {
@Autowired
private EntityManager entityManager;
@Override
public List<MesWorkOrder> sumMesWorkOrderQtyToSap(String organizeCode, List<Integer> statusList) {
StringBuffer hql = new StringBuffer("select new MesWorkOrder(partNo,planStartTime,sum(qty)) from MesWorkOrder " +
"where isDeleted=:isDeleted and isValid = :isValid and organizeCode = :organizeCode " +
"and workOrderStatus not in(:statusList) group by partNo,planStartTime");
Query query = entityManager.createQuery(hql.toString(), MesWorkOrder.class);
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);
return query.getResultList();
}
}

@ -0,0 +1,76 @@
package cn.estsh.i3plus.ext.mes.apiservice.schedulejob;
import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderService;
import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderToSapService;
import cn.estsh.i3plus.mes.apiservice.schedulejob.BaseMesScheduleJob;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder;
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;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.util.CollectionUtils;
import java.util.List;
/**
* @Description : SAP
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/5/11 15:58
* @Modify:
**/
// 禁止 JOB 并发执行
@DisallowConcurrentExecution
@ApiOperation("汇总工单给SAP")
public class MesWorkOrderToSapJob extends BaseMesScheduleJob {
public static final Logger LOGGER = LoggerFactory.getLogger(MesWorkOrderToSapJob.class);
private static final long serialVersionUID = 9072058154235836696L;
@Autowired
private IMesWorkOrderService mesWorkOrderService;
@Autowired
private IMesWorkOrderToSapService mesWorkOrderToSapService;
@Value("${server.port}")
private String serverPort;
@Value("${impp.server.ip}")
private String ip;
public MesWorkOrderToSapJob() {
super(MesWorkOrderToSapJob.class, "汇总工单给SAP");
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("汇总工单给SAP开始 -----start");
for (String organizeCode : organizeCodeList) {
List<MesWorkOrder> mesWorkOrderList = mesWorkOrderService.sumMesWorkOrderQtyToSap(organizeCode);
if (!CollectionUtils.isEmpty(mesWorkOrderList)){
mesWorkOrderToSapService.doMesWorkOrder(organizeCode,mesWorkOrderList);
}
}
LOGGER.info("汇总工单给SAP开始结束 ----- end");
} catch (Exception e) {
LOGGER.error("汇总工单给SAP任务结束e:{}",e.toString());
}
}
}

@ -4,6 +4,7 @@ import cn.estsh.i3plus.ext.mes.api.base.IMesPartService;
import cn.estsh.i3plus.ext.mes.api.base.IMesProductOffLineService; import cn.estsh.i3plus.ext.mes.api.base.IMesProductOffLineService;
import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderService; import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderService;
import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderToSapService; import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderToSapService;
import cn.estsh.i3plus.ext.mes.apiservice.dao.IMesWorkOrderDao;
import cn.estsh.i3plus.ext.mes.apiservice.unit.exception.MesException; import cn.estsh.i3plus.ext.mes.apiservice.unit.exception.MesException;
import cn.estsh.i3plus.ext.mes.pojo.util.MesExtEnumUtil; import cn.estsh.i3plus.ext.mes.pojo.util.MesExtEnumUtil;
import cn.estsh.i3plus.mes.api.iservice.busi.ISyncFuncService; import cn.estsh.i3plus.mes.api.iservice.busi.ISyncFuncService;
@ -48,6 +49,8 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
private MesBomRepository mesBomRDao; private MesBomRepository mesBomRDao;
@Autowired @Autowired
private IMesProductOffLineService mesProductOffLineService; private IMesProductOffLineService mesProductOffLineService;
@Autowired
private IMesWorkOrderDao mesWorkOrderDao;
@Override @Override
public MesWorkOrder insert(MesWorkOrder bean) { public MesWorkOrder insert(MesWorkOrder bean) {
@ -90,7 +93,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
baseRDao.insert(copyMesWorkOrder); baseRDao.insert(copyMesWorkOrder);
workOrderLogService.insertBatch(orderLogList); workOrderLogService.insertBatch(orderLogList);
//写入接口表 //写入接口表
iMesWorkOrderToSapService.insert(bean); //iMesWorkOrderToSapService.insert(bean);
return bean; return bean;
} else if (bean.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue()) { } else if (bean.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue()) {
//生成工单号 //生成工单号
@ -120,7 +123,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
workOrderLogService.insert(workOrderLog); workOrderLogService.insert(workOrderLog);
bean = baseRDao.insert(bean); bean = baseRDao.insert(bean);
//写入接口表 //写入接口表
iMesWorkOrderToSapService.insert(bean); //iMesWorkOrderToSapService.insert(bean);
return bean; return bean;
} }
@ -164,6 +167,9 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
if (bean.getCompleteQty() > 0) { if (bean.getCompleteQty() > 0) {
result.setCompleteQty(bean.getCompleteQty()); result.setCompleteQty(bean.getCompleteQty());
} }
if (bean.getUnCompleteQty() > 0) {
result.setUnCompleteQty(bean.getUnCompleteQty());
}
//更新状态 //更新状态
if (bean.getWorkOrderStatus() > 0) { if (bean.getWorkOrderStatus() > 0) {
result.setWorkOrderStatus(bean.getWorkOrderStatus()); result.setWorkOrderStatus(bean.getWorkOrderStatus());
@ -180,7 +186,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
} }
//发送给SAP //发送给SAP
if (sendToSap) { if (sendToSap) {
iMesWorkOrderToSapService.insert(bean); //iMesWorkOrderToSapService.insert(bean);
} }
baseRDao.update(result); baseRDao.update(result);
@ -279,6 +285,8 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
} }
//更新工单状态 //更新工单状态
mesWorkOrder.setCompleteQty(MathOperation.add(mesWorkOrder.getNum(), mesWorkOrder.getCompleteQty())); mesWorkOrder.setCompleteQty(MathOperation.add(mesWorkOrder.getNum(), mesWorkOrder.getCompleteQty()));
double unCompleteQty = MathOperation.sub(mesWorkOrder.getQty(), mesWorkOrder.getCompleteQty());
mesWorkOrder.setUnCompleteQty(unCompleteQty > 0 ? unCompleteQty : 0);
if (mesWorkOrder.getCompleteQty() >= mesWorkOrder.getQty()) { if (mesWorkOrder.getCompleteQty() >= mesWorkOrder.getQty()) {
mesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue()); mesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue());
} else { } else {
@ -317,4 +325,13 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
} }
mesProductOffLineService.insertBatch(mesProductOffLineList); mesProductOffLineService.insertBatch(mesProductOffLineList);
} }
@Override
public List<MesWorkOrder> sumMesWorkOrderQtyToSap(String organizeCode) {
List<Integer> statusList = new ArrayList<>();
statusList.add(MesExtEnumUtil.ORDER_STATUS.CREATE.getValue());
statusList.add(MesExtEnumUtil.ORDER_STATUS.CLOSE.getValue());
//查询汇总工单数量
return mesWorkOrderDao.sumMesWorkOrderQtyToSap(organizeCode, statusList);
}
} }

@ -2,10 +2,17 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base;
import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderToSapService; import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderToSapService;
import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderToSap; import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderToSap;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.List;
import java.util.Objects;
@Service @Service
@Slf4j @Slf4j
@ -14,8 +21,32 @@ public class MesWorkOrderToSapServiceImpl extends BaseMesService<MesWorkOrderToS
@Override @Override
public MesWorkOrderToSap insert(MesWorkOrder mesWorkOrder) { public MesWorkOrderToSap insert(MesWorkOrder mesWorkOrder) {
MesWorkOrderToSap mesWorkOrderToSap = new MesWorkOrderToSap(mesWorkOrder.getOrganizeCode(), MesWorkOrderToSap mesWorkOrderToSap = new MesWorkOrderToSap(mesWorkOrder.getOrganizeCode(),
mesWorkOrder.getOrganizeCode(), mesWorkOrder.getPartNo(), mesWorkOrder.getProductVersion(), mesWorkOrder.getQty(), mesWorkOrder.getPlanEndTime()); mesWorkOrder.getOrganizeCode(), mesWorkOrder.getPartNo(), mesWorkOrder.getProductVersion(),
mesWorkOrder.getQty(), mesWorkOrder.getPlanStartTime());
ConvertBean.serviceModelUpdate(mesWorkOrderToSap,mesWorkOrder.getModifyUser()); ConvertBean.serviceModelUpdate(mesWorkOrderToSap,mesWorkOrder.getModifyUser());
return baseRDao.insert(mesWorkOrderToSap); return baseRDao.insert(mesWorkOrderToSap);
} }
@Override
public void doMesWorkOrder(String organizeCode,List<MesWorkOrder> mesWorkOrderList) {
Pager pager = new Pager(1,1);
DdlPackBean ddlPackBean = null;
for (MesWorkOrder mesWorkOrder : mesWorkOrderList) {
mesWorkOrder.setOrganizeCode(organizeCode);
mesWorkOrder.setModifyUser("job");
//计划开始时间+物料查询发送Sap的数据
ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(mesWorkOrder.getPlanStartTime(),"pedtr",ddlPackBean);
DdlPreparedPack.getStringEqualPack(mesWorkOrder.getPartNo(),"plmat",ddlPackBean);
ddlPackBean.setOrderByStr(" order by createDatetime desc ");
List<MesWorkOrderToSap> workOrderToSapList = baseRDao.findByHqlPage(ddlPackBean,pager);
if(CollectionUtils.isEmpty(workOrderToSapList)){
insert(mesWorkOrder);
}else{
if(!Objects.equals(workOrderToSapList.iterator().next().getGsmng(),mesWorkOrder.getQty())){
insert(mesWorkOrder);
}
}
}
}
} }

Loading…
Cancel
Save