生产汇报开发

tags/yfai-mes-ext-v1.0
jun 1 year ago
parent c326833687
commit ac5a142300

@ -0,0 +1,15 @@
package cn.estsh.i3plus.ext.mes.api.base;
import cn.estsh.i3plus.pojo.mes.bean.MesProductOffLine;
/**
* @Description :
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/5/10 14:37
* @Modify:
**/
public interface IMesProductOffLineService extends IBaseMesService<MesProductOffLine>{
}

@ -1,7 +1,6 @@
package cn.estsh.i3plus.ext.mes.api.base;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderLog;
/**
* @Description:
@ -10,5 +9,5 @@ import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderLog;
*/
public interface IMesWorkOrderService extends IBaseMesService<MesWorkOrder> {
void doProductReport(MesWorkOrder mesWorkOrder);
}

@ -0,0 +1,19 @@
package cn.estsh.i3plus.ext.mes.apiservice.controller.base;
import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.pojo.mes.bean.MesProductOffLine;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @Description :
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/5/10 14:36
* @Modify:
**/
@RestController
@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesProductOffLine")
public class MesProductOffLineController extends BaseMesController<MesProductOffLine> {
}

@ -1,5 +1,6 @@
package cn.estsh.i3plus.ext.mes.apiservice.controller.base;
import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderService;
import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.excel.MesExcelTool;
import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
@ -12,10 +13,8 @@ import cn.estsh.impp.framework.boot.util.RedisCacheTool;
import cn.estsh.impp.framework.boot.util.ResultBean;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
@ -25,6 +24,9 @@ import java.util.List;
@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesWorkOrder")
public class MesWorkOrderController extends BaseMesController<MesWorkOrder> {
@Autowired
private IMesWorkOrderService mesWorkOrderService;
@PostMapping(value = "/import-mes-work-order")
@ApiOperation(value = "导入数据")
public ResultBean importMesWorkOrderExcel(@RequestParam("file") MultipartFile file, Integer type) {
@ -54,5 +56,22 @@ public class MesWorkOrderController extends BaseMesController<MesWorkOrder> {
}
}
@PostMapping(value = "/doProductReport")
@ApiOperation(value = "生产报工")
public ResultBean doProductReport(@RequestBody MesWorkOrder mesWorkOrder) {
try {
//新增初始化
mesWorkOrder.setOrganizeCode(AuthUtil.getOrganizeCode());
ConvertBean.serviceModelInitialize(mesWorkOrder, AuthUtil.getSessionUser().getUserName());
mesWorkOrderService.doProductReport(mesWorkOrder);
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.serviceimpl.base;
import cn.estsh.i3plus.ext.mes.api.base.IMesProductOffLineService;
import cn.estsh.i3plus.pojo.mes.bean.MesProductOffLine;
import org.springframework.stereotype.Service;
/**
* @Description :
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/5/10 14:40
* @Modify:
**/
@Service
public class MesProductOffLineImpl extends BaseMesService<MesProductOffLine> implements IMesProductOffLineService {
}

@ -1,6 +1,7 @@
package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base;
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.IMesWorkOrderService;
import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderToSapService;
import cn.estsh.i3plus.ext.mes.apiservice.unit.exception.MesException;
@ -8,20 +9,20 @@ import cn.estsh.i3plus.ext.mes.pojo.util.MesExtEnumUtil;
import cn.estsh.i3plus.mes.api.iservice.busi.ISyncFuncService;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum;
import cn.estsh.i3plus.platform.common.tool.MathOperation;
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.MesPart;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderLog;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderToSap;
import cn.estsh.i3plus.pojo.mes.bean.*;
import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel;
import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderToSapRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesBomRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesProductVersionRepository;
import cn.estsh.impp.framework.boot.auth.AuthUtil;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.impp.framework.boot.util.ValidatorBean;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -41,6 +42,12 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
private IMesWorkOrderToSapService iMesWorkOrderToSapService;
@Autowired
private IMesPartService iMesPartService;
@Autowired
private MesProductVersionRepository mesProductVersionRDao;
@Autowired
private MesBomRepository mesBomRDao;
@Autowired
private IMesProductOffLineService mesProductOffLineService;
@Override
public MesWorkOrder insert(MesWorkOrder bean) {
@ -125,27 +132,28 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
MesWorkOrder result = baseRDao.getById(bean.getId());
//若工单类型为排序 则根据排序插入工单数量插入多行 工单数量为1
if (result.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.SORT.getValue()) {
if(!Objects.equals(bean.getQty(), result.getQty())){
if (!Objects.equals(bean.getQty(), result.getQty())) {
MesException.throwMesBusiException(String.format("工单类型为【%s】 不需要修改数量",
MesExtEnumUtil.ORDER_TYPE.SORT.getDescription()));
}
}else{
} else {
//工单数量只能比原来的大
if(bean.getQty() < result.getQty()){
if (bean.getQty() < result.getQty()) {
MesException.throwMesBusiException(String.format("工单数量不能小于工单源数量【%s】",
result.getQty()));
}
//修改状态或者指令下发需要传给SAP
if(!Objects.equals(bean.getQty(), result.getQty())){
if (!Objects.equals(bean.getQty(), result.getQty())) {
sendToSap = true;
}
}
if(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue() == bean.getWorkOrderStatus()){
if (MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue() == bean.getWorkOrderStatus() ||
MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue() == bean.getWorkOrderStatus()) {
sendToSap = true;
}
//在加工的工单不能修改物料信息
if(result.getWorkOrderStatus() >= MesExtEnumUtil.ORDER_STATUS.process.getValue()){
if(!Objects.equals(bean.getPartNo(), result.getPartNo())){
if (result.getWorkOrderStatus() >= MesExtEnumUtil.ORDER_STATUS.process.getValue()) {
if (!Objects.equals(bean.getPartNo(), result.getPartNo())) {
MesException.throwMesBusiException(String.format("工单状态为【%s】不允许修改物料",
MesExtEnumUtil.ORDER_TYPE.valueOfDescription(result.getWorkOrderStatus())));
}
@ -159,12 +167,12 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
BeanUtils.copyProperties(result, workOrderLog, "id");
workOrderLogService.insert(workOrderLog);
//关闭工单
if(MesExtEnumUtil.ORDER_STATUS.CLOSE.getValue() == bean.getWorkOrderStatus()){
if (MesExtEnumUtil.ORDER_STATUS.CLOSE.getValue() == bean.getWorkOrderStatus()) {
bean.setQty(0d);
sendToSap = true;
}
//发送给SAP
if(sendToSap){
if (sendToSap) {
iMesWorkOrderToSapService.insert(bean);
}
@ -174,19 +182,19 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
protected void setPackQueryBean(MesWorkOrder bean, DdlPackBean packBean) {
DdlPreparedPack.getStringLikerPack(bean.getOrderNo(),"orderNo",packBean);
DdlPreparedPack.getStringLikerPack(bean.getPartNameRdd(),"partNameRdd",packBean);
DdlPreparedPack.getStringEqualPack(bean.getPartNo(),"partNo",packBean);
DdlPreparedPack.getStringEqualPack(bean.getCustPartNo(),"custPartNo",packBean);
DdlPreparedPack.getStringEqualPack(bean.getWorkCenterCode(),"workCenterCode",packBean);
DdlPreparedPack.getNumEqualPack(bean.getWorkOrderStatus(),"workOrderStatus",packBean);
DdlPreparedPack.getNumEqualPack(bean.getWorkOrderType(),"workOrderType",packBean);
DdlPreparedPack.getStringBiggerPack(bean.getCreateDateTimeStart(),"createDatetime",packBean);
DdlPreparedPack.getStringSmallerPack(bean.getCreateDateTimeEnd(),"createDatetime",packBean);
DdlPreparedPack.getStringBiggerPack(bean.getStartTimeStart(),"planStartTime",packBean);
DdlPreparedPack.getStringSmallerPack(bean.getStartTimeEnd(),"planStartTime",packBean);
DdlPreparedPack.getStringBiggerPack(bean.getEndTimeStart(),"planEndTime",packBean);
DdlPreparedPack.getStringSmallerPack(bean.getEndTimeEnd(),"planEndTime",packBean);
DdlPreparedPack.getStringLikerPack(bean.getOrderNo(), "orderNo", packBean);
DdlPreparedPack.getStringLikerPack(bean.getPartNameRdd(), "partNameRdd", packBean);
DdlPreparedPack.getStringEqualPack(bean.getPartNo(), "partNo", packBean);
DdlPreparedPack.getStringEqualPack(bean.getCustPartNo(), "custPartNo", packBean);
DdlPreparedPack.getStringEqualPack(bean.getWorkCenterCode(), "workCenterCode", packBean);
DdlPreparedPack.getNumEqualPack(bean.getWorkOrderStatus(), "workOrderStatus", packBean);
DdlPreparedPack.getNumEqualPack(bean.getWorkOrderType(), "workOrderType", packBean);
DdlPreparedPack.getStringBiggerPack(bean.getCreateDateTimeStart(), "createDatetime", packBean);
DdlPreparedPack.getStringSmallerPack(bean.getCreateDateTimeEnd(), "createDatetime", packBean);
DdlPreparedPack.getStringBiggerPack(bean.getStartTimeStart(), "planStartTime", packBean);
DdlPreparedPack.getStringSmallerPack(bean.getStartTimeEnd(), "planStartTime", packBean);
DdlPreparedPack.getStringBiggerPack(bean.getEndTimeStart(), "planEndTime", packBean);
DdlPreparedPack.getStringSmallerPack(bean.getEndTimeEnd(), "planEndTime", packBean);
}
protected void onInsertBean(MesWorkOrder item) {
@ -231,7 +239,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
}
}
//物料名称不存在,从物料信息中获取
if(StringUtil.isEmpty(item.getPartNameRdd())){
if (StringUtil.isEmpty(item.getPartNameRdd())) {
MesPart mesPart = iMesPartService.getPartByPartNo(item.getPartNo(), item.getOrganizeCode());
item.setPartNameRdd(mesPart.getPartName());
}
@ -242,4 +250,64 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
}
@Override
public void doProductReport(MesWorkOrder mesWorkOrder) {
//查询物料信息
MesPart mesPart = iMesPartService.getPartByPartNo(mesWorkOrder.getPartNo(), mesWorkOrder.getOrganizeCode());
//获取生产版本
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(mesWorkOrder.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(mesPart.getPartNo(), "partNo", ddlPackBean);
MesProductVersion mesProductVersion = mesProductVersionRDao.getByProperty(ddlPackBean);
if (null == mesProductVersion) {
MesException.throwMesBusiException("物料【%s】生产版本信息不存在", mesWorkOrder.getPartNo());
}
//物料+生产版本获取bom信息
ddlPackBean = DdlPackBean.getDdlPackBean(mesWorkOrder.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(mesPart.getPartNo(), "partNo", ddlPackBean);
DdlPreparedPack.getStringEqualPack(mesProductVersion.getProductVersion(), "bomVersion", ddlPackBean);
List<MesBom> mesBoms = mesBomRDao.findByHqlWhere(ddlPackBean);
if (CollectionUtils.isEmpty(mesBoms)) {
MesException.throwMesBusiException("物料【%s】生产版本【%s】对应bom信息不存在",
mesWorkOrder.getPartNo(), mesProductVersion.getProductVersion());
}
//更新工单状态
mesWorkOrder.setCompleteQty(MathOperation.add(mesWorkOrder.getNum(), mesWorkOrder.getCompleteQty()));
if (mesWorkOrder.getCompleteQty() >= mesWorkOrder.getQty()) {
mesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue());
} else {
mesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.process.getValue());
}
update(mesWorkOrder);
//生成条码
GenSerialNoModel genSerialNoModel = new GenSerialNoModel("REPORT_SN");
genSerialNoModel.setPartNo(mesWorkOrder.getPartNo());
List<String> resultList = syncFuncService.syncSerialNo(genSerialNoModel, mesWorkOrder.getCreateUser(), mesWorkOrder.getOrganizeCode(), mesWorkOrder.getNum()).getResultList();
//保存数据
List<MesProductOffLine> mesProductOffLineList = new ArrayList<>();
MesProductOffLine newMesProductOffLine;
for (String sn : resultList) {
for (MesBom mesBom : mesBoms) {
newMesProductOffLine = new MesProductOffLine();
newMesProductOffLine.setReportPartNo(mesWorkOrder.getPartNo());
newMesProductOffLine.setReportPartNameRdd(mesWorkOrder.getPartNameRdd());
newMesProductOffLine.setItemPartNo(mesBom.getItemPartNo());
newMesProductOffLine.setItemPartNameRdd(mesBom.getItemPartName());
newMesProductOffLine.setItemQty(mesBom.getItemQty());
newMesProductOffLine.setQty(1d);
newMesProductOffLine.setReportSn(sn);
newMesProductOffLine.setBomVersion(mesBom.getBomVersion());
newMesProductOffLine.setSerialNumber(sn);
newMesProductOffLine.setUnit(mesBom.getUnit());
newMesProductOffLine.setItemUnit(mesBom.getItemUnit());
newMesProductOffLine.setWorkOrderNo(mesWorkOrder.getOrderNo());
newMesProductOffLine.setWorkCenterCode(mesWorkOrder.getWorkCenterCode());
newMesProductOffLine.setWorkCellCode(mesWorkOrder.getWorkCellCode());
ConvertBean.serviceModelInitialize(newMesProductOffLine, mesWorkOrder.getCreateUser());
mesProductOffLineList.add(newMesProductOffLine);
}
}
mesProductOffLineService.insertBatch(mesProductOffLineList);
}
}

@ -3,7 +3,6 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base;
import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderToSapService;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderLog;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderToSap;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@ -15,7 +14,7 @@ public class MesWorkOrderToSapServiceImpl extends BaseMesService<MesWorkOrderToS
@Override
public MesWorkOrderToSap insert(MesWorkOrder mesWorkOrder) {
MesWorkOrderToSap mesWorkOrderToSap = new MesWorkOrderToSap(mesWorkOrder.getOrganizeCode(),
mesWorkOrder.getOrganizeCode(), mesWorkOrder.getPartNo(), "", mesWorkOrder.getQty(), mesWorkOrder.getPlanEndTime());
mesWorkOrder.getOrganizeCode(), mesWorkOrder.getPartNo(), mesWorkOrder.getProductVersion(), mesWorkOrder.getQty(), mesWorkOrder.getPlanEndTime());
ConvertBean.serviceModelUpdate(mesWorkOrderToSap,mesWorkOrder.getModifyUser());
return baseRDao.insert(mesWorkOrderToSap);
}

Loading…
Cancel
Save