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

tags/yfai-mes-ext-v1.0
administrator 11 months ago
commit cb82726adf

@ -0,0 +1,17 @@
package cn.estsh.i3plus.ext.mes.api.base;
import cn.estsh.i3plus.pojo.mes.bean.MesMoveRule;
import java.util.List;
/**
* @Description :
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/6/5 9:06
* @Modify:
**/
public interface IMesMoveRuleService extends IBaseMesService<MesMoveRule> {
List<MesMoveRule> findMesMoveRuleByPartProdGroupCode(String partProdGroupCode,String organizeCode);
}

@ -2,6 +2,8 @@ package cn.estsh.i3plus.ext.mes.api.base;
import cn.estsh.i3plus.pojo.mes.bean.MesPartSap;
import java.util.List;
/**
* @Description:
* @CreateDate 2024/04/16
@ -10,4 +12,6 @@ import cn.estsh.i3plus.pojo.mes.bean.MesPartSap;
public interface IMesPartSapService extends IBaseMesService<MesPartSap> {
MesPartSap getMesPartSapByPartNo(String partNo, String organizeCode);
List<MesPartSap> findMesPartSapByPartNoList(List<String> partNoList, String organizeCode);
}

@ -2,6 +2,8 @@ package cn.estsh.i3plus.ext.mes.api.base;
import cn.estsh.i3plus.pojo.mes.bean.MesPart;
import java.util.List;
/**
* @Description:
* @CreateDate 2024/04/16
@ -11,5 +13,5 @@ public interface IMesPartService extends IBaseMesService<MesPart> {
MesPart getPartByPartNo(String partNo, String organizeCode);
List<MesPart> findMesPartByPartNoList(List<String> partNoList, String organizeCode);
}

@ -1,6 +1,5 @@
package cn.estsh.i3plus.ext.mes.api.base;
import cn.estsh.i3plus.pojo.mes.bean.MesPart;
import cn.estsh.i3plus.pojo.mes.bean.MesProdRuleNosortCfg;
/**
@ -10,5 +9,6 @@ import cn.estsh.i3plus.pojo.mes.bean.MesProdRuleNosortCfg;
*/
public interface IMesProdRuleNosortCfgService extends IBaseMesService<MesProdRuleNosortCfg> {
MesProdRuleNosortCfg findMesProdRuleNosortCfgByWorkCenterCode(String workCenterCode, String partNo, String organizeCode);
}

@ -13,6 +13,10 @@ public interface IMesWorkOrderService extends IBaseMesService<MesWorkOrder> {
void doProductReport(MesWorkOrder mesWorkOrder);
void doProductReportExt(MesWorkOrder mesWorkOrder);
void deleteUnSortOrder(String userName,String organizeCode);
List<MesWorkOrder> sumMesWorkOrderQtyToSap(String organizeCode);
List<MesWorkOrder> queryMesWorkOrderProcessToSap(String organizeCode);

@ -1,10 +1,27 @@
package cn.estsh.i3plus.ext.mes.apiservice.controller.base;
import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.icloud.core.sdk.ICoreSysFileCloud;
import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesMediaFileCfg;
import cn.estsh.i3plus.pojo.mes.repository.MesMediaFileCfgRepository;
import cn.estsh.impp.framework.boot.exception.ImppBusiException;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.impp.framework.boot.util.ResultBean;
import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.util.UUID;
/**
* @Description:
@ -15,4 +32,92 @@ import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesMediaFileCfg")
public class MesMediaFileCfgController extends BaseMesController<MesMediaFileCfg>{
public static final Logger LOGGER = LoggerFactory.getLogger(MesMediaFileCfgController.class);
@Autowired
private MesMediaFileCfgRepository mediaFileCfgRepository;
@Autowired
private ICoreSysFileCloud coreSysFileCloud;
//默认大小
private static final long FILE_SIZE = 1024 * 1024;
@PostMapping(value = "/media-file/insert")
@ApiOperation(value = "上传媒体文件")
public ResultBean insertProduceCtgyPicture(@RequestParam("file") MultipartFile file, MesMediaFileCfg mesMediaFileCfg) {
try {
if (file.isEmpty()) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.REPORT.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("不允许上传空文件")
.build();
}
// 校验文件大小
long size = file.getSize();
if(size > FILE_SIZE){
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.REPORT.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("文件过大,请重新上传!")
.build();
}
String fileName = file.getOriginalFilename();
String newName= UUID.randomUUID().toString()+fileName.substring(fileName.indexOf("."));
String path="/tmp/media-file/";
File saveFile=new File(path + newName);
if(!saveFile.getParentFile().exists()){
saveFile.getParentFile().mkdirs();
}
file.transferTo(saveFile);
MesMediaFileCfg mesMediaFileCfg1=new MesMediaFileCfg();
mesMediaFileCfg1.setFileName(fileName);
mesMediaFileCfg1.setFileUrl(saveFile.getPath());
mesMediaFileCfg1.setFileType(mesMediaFileCfg.getFileType());
mediaFileCfgRepository.save(mesMediaFileCfg1);
return ResultBean.success("添加成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultObject(mesMediaFileCfg1);
} catch (ImppBusiException imppException) {
LOGGER.error(imppException.getErrorMsg() + "{}", imppException.getErrorDetail(), imppException);
return ResultBean.fail(imppException);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
@ApiOperation("下载文件")
@GetMapping("/download")
public ResultBean download(@RequestParam("filePath") String filePath, HttpServletResponse response){
InputStream inputStream = null;
OutputStream outputStream = null;
try {
// 读取文件
File file = new File(filePath);
inputStream = new FileInputStream(file);
outputStream = response.getOutputStream();
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(file.getName(), "UTF-8"));
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
outputStream.flush();
inputStream.close();
outputStream.close();
return ResultBean.success("下载成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
} catch (ImppBusiException imppException) {
LOGGER.error(imppException.getErrorMsg() + "{}", imppException.getErrorDetail(), imppException);
return ResultBean.fail(imppException);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
}

@ -0,0 +1,18 @@
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.MesMoveRule;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @Description :
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/6/5 9:06
* @Modify:
**/
@RestController
@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesMoveRule")
public class MesMoveRuleController extends BaseMesController<MesMoveRule>{
}

@ -2,16 +2,19 @@ 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.IMesWorkOrderToSapService;
import cn.estsh.i3plus.ext.mes.apiservice.config.AuthUtilExt;
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;
import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import cn.estsh.impp.framework.boot.auth.AuthUtil;
import cn.estsh.impp.framework.boot.exception.ImppBusiException;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.impp.framework.boot.util.RedisCacheTool;
import cn.estsh.impp.framework.boot.util.ResultBean;
import cn.estsh.impp.framework.boot.util.ValidatorBean;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
@ -43,6 +46,10 @@ public class MesWorkOrderController extends BaseMesController<MesWorkOrder> {
validateImport(beanList);
String userName = AuthUtil.getSessionUser().getUserName();
String organizeCode = AuthUtil.getOrganize().getOrganizeCode();
//非排序工单导入前删除
if (MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue() == type) {
mesWorkOrderService.deleteUnSortOrder(userName,organizeCode);
}
// 导入数据初始化
for (MesWorkOrder bean : beanList) {
bean.setWorkOrderType(type);
@ -78,6 +85,26 @@ public class MesWorkOrderController extends BaseMesController<MesWorkOrder> {
}
}
@PostMapping(value = "/doProductReportExt")
@ApiOperation(value = "生产报工(武汉)")
public ResultBean doProductReportExt(@RequestBody MesWorkOrder mesWorkOrder) {
try {
ValidatorBean.checkNotNull(mesWorkOrder.getId(),"工单id不能为空");
ValidatorBean.checkNotNull(mesWorkOrder.getNum(),"报工数量不能为空");
ValidatorBean.checkNotZero(mesWorkOrder.getNum(),"报工数量不能为0");
mesWorkOrder.setOrganizeCode(AuthUtilExt.getOrganizeCode());
ConvertBean.serviceModelUpdate(mesWorkOrder, AuthUtilExt.getUserName());
//新增初始化
mesWorkOrderService.doProductReportExt(mesWorkOrder);
return ResultBean.success("操作成功")
.setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
} catch (ImppBusiException e) {
return ResultBean.fail(e).build();
} catch (Exception e) {
return ResultBean.fail(e);
}
}
@GetMapping(value = "/sendToSap")
@ApiOperation(value = "发送给sap")

@ -0,0 +1,12 @@
package cn.estsh.i3plus.ext.mes.apiservice.dao;
import cn.estsh.i3plus.pojo.mes.bean.MesProdRuleNosortCfg;
import java.util.List;
public interface IMesProdRuleNosortCfgDao {
List<MesProdRuleNosortCfg> findMesProdRuleNosortCfgByWorkCenterCode(String workCenterCode, String partNo, String organizeCode);
}

@ -0,0 +1,38 @@
package cn.estsh.i3plus.ext.mes.apiservice.daoimpl;
import cn.estsh.i3plus.ext.mes.apiservice.dao.IMesProdRuleNosortCfgDao;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesProdRuleNosortCfg;
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;
@Service
@Slf4j
public class MesProdRuleNosortCfgDaoImpl implements IMesProdRuleNosortCfgDao {
@Autowired
private EntityManager entityManager;
@Override
public List<MesProdRuleNosortCfg> findMesProdRuleNosortCfgByWorkCenterCode(String workCenterCode, String partNo, String organizeCode) {
StringBuffer hql = new StringBuffer("select ns from MesProdRuleNosortCfg ns" +
" left join MesWcEquipment we on ns.equipmentCode = we.equipmentCode " +
" where ns.isDeleted=:isDeleted and ns.isValid = :isValid and ns.organizeCode = :organizeCode " +
" and we.isDeleted=:isDeleted and we.isValid = :isValid and we.organizeCode = :organizeCode " +
" and we.workCenterCode = :workCenterCode and ns.outPartNo = :outPartNo");
Query query = entityManager.createQuery(hql.toString(), MesProdRuleNosortCfg.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("workCenterCode", workCenterCode);
query.setParameter("outPartNo", partNo);
return query.getResultList();
}
}

@ -25,6 +25,7 @@ public class MesLoadingGroupDetailServiceImpl extends BaseMesService<MesLoadingG
@Override
protected void setPackQueryBean(MesLoadingGroupDetail bean, DdlPackBean packBean) {
DdlPreparedPack.getStringEqualPack(bean.getLoadingGroupNo(), "loadingGroupNo", packBean);
DdlPreparedPack.getStringEqualPack(bean.getShippingGroupCode(), "shippingGroupCode", packBean);
}

@ -0,0 +1,80 @@
package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base;
import cn.estsh.i3plus.ext.mes.api.base.IMesMoveRuleService;
import cn.estsh.i3plus.ext.mes.apiservice.unit.exception.MesException;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesMoveRule;
import cn.estsh.impp.framework.boot.util.ValidatorBean;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.List;
/**
* @Description :
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/6/5 9:08
* @Modify:
**/
@Service
@Slf4j
public class MesMoveRuleImpl extends BaseMesService<MesMoveRule> implements IMesMoveRuleService {
@Override
protected void setPackQueryBean(MesMoveRule bean, DdlPackBean packBean) {
DdlPreparedPack.getStringEqualPack(bean.getPartProdGroupCode(), "partProdGroupCode", packBean);
DdlPreparedPack.getStringEqualPack(bean.getSrcType(), "srcType", packBean);
}
@Override
protected void onInsertBean(MesMoveRule item) {
// 数据校验
checkNotNull(item);
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(item.getPartProdGroupCode(), "partProdGroupCode", ddlPackBean);
DdlPreparedPack.getStringEqualPack(item.getSrcType(), "srcType", ddlPackBean);
if (baseRDao.isExitByHql(ddlPackBean)) {
MesException.throwMesBusiException("零件生产组代码【%s】来源类型【%s】数据已存在", item.getPartProdGroupCode(), item.getSrcType());
}
}
@Override
protected void onUpdateBean(MesMoveRule item) {
// 数据校验
checkNotNull(item);
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(item.getPartProdGroupCode(), "partProdGroupCode", ddlPackBean);
DdlPreparedPack.getStringEqualPack(item.getSrcType(), "srcType", ddlPackBean);
DdlPreparedPack.getNumNOEqualPack(item.getId(), "id", ddlPackBean);
if (baseRDao.isExitByHql(ddlPackBean)) {
MesException.throwMesBusiException("零件生产组代码【%s】来源类型【%s】数据已存在", item.getPartProdGroupCode(), item.getSrcType());
}
}
@Override
public List<MesMoveRule> findMesMoveRuleByPartProdGroupCode(String partProdGroupCode, String organizeCode) {
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(partProdGroupCode, "partProdGroupCode", ddlPackBean);
List<MesMoveRule> moveRules = baseRDao.findByHqlWhere(ddlPackBean);
if (CollectionUtils.isEmpty(moveRules)) {
MesException.throwMesBusiException("零件生产组代码【%s】移库规则数据不存在", partProdGroupCode);
}
return moveRules;
}
private void checkNotNull(MesMoveRule item) {
ValidatorBean.checkNotNull(item.getPartProdGroupCode(), "零件生产组代码不能为空");
ValidatorBean.checkNotNull(item.getErpSrcLocateNo(), "ERP来源库位不能为空");
ValidatorBean.checkNotNull(item.getErpDestLocateNo(), "ERP目的库位不能为空");
ValidatorBean.checkNotNull(item.getSrcType(), "来源类型不能为空");
ValidatorBean.checkNotNull(item.getReportType(), "汇报类型不能为空");
}
}

@ -11,6 +11,9 @@ import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.impp.framework.boot.util.ValidatorBean;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.List;
@Service
@Slf4j
@ -69,4 +72,15 @@ public class MesPartSapService extends BaseMesService<MesPartSap> implements IMe
}
return mesPart;
}
@Override
public List<MesPartSap> findMesPartSapByPartNoList(List<String> partNoList, String organizeCode) {
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getInPackList(partNoList, "partNo", ddlPackBean);
List<MesPartSap> mesPartSapList = baseRDao.findByHqlWhere(ddlPackBean);
if (CollectionUtils.isEmpty(mesPartSapList)) {
MesException.throwMesBusiException("物料【%s】信息不存在", partNoList);
}
return mesPartSapList;
}
}

@ -7,10 +7,14 @@ 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.MesPart;
import cn.estsh.i3plus.pojo.mes.bean.MesPartSap;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.impp.framework.boot.util.ValidatorBean;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.List;
@Service
@Slf4j
@ -33,6 +37,17 @@ public class MesPartService extends BaseMesService<MesPart> implements IMesPartS
return mesPart;
}
@Override
public List<MesPart> findMesPartByPartNoList(List<String> partNoList, String organizeCode) {
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getInPackList(partNoList, "partNo", ddlPackBean);
List<MesPart> mesPartList = baseRDao.findByHqlWhere(ddlPackBean);
if (CollectionUtils.isEmpty(mesPartList)) {
MesException.throwMesBusiException("物料【%s】信息不存在", partNoList);
}
return mesPartList;
}
protected void onInsertBean(MesPart item) {
// 数据校验
ValidatorBean.checkNotNull(item.getPartNo(), "物料号不能为空");

@ -11,7 +11,7 @@ import org.springframework.stereotype.Service;
@Slf4j
public class MesPartTransferDetailService extends BaseMesService<MesPartTransferDetail> implements IMesPartTransferDetailService {
protected void setPackQueryBean(MesPartTransferDetail bean, DdlPackBean packBean) {
DdlPreparedPack.getStringEqualPack(bean.getPid(),"pid",packBean);
DdlPreparedPack.getNumEqualPack(bean.getPid(),"pid",packBean);
}
}

@ -1,24 +1,29 @@
package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base;
import cn.estsh.i3plus.ext.mes.api.base.IMesProdRuleNosortCfgService;
import cn.estsh.i3plus.ext.mes.api.base.IMesTimeEfficientCfgService;
import cn.estsh.i3plus.ext.mes.apiservice.dao.IMesProdRuleNosortCfgDao;
import cn.estsh.i3plus.ext.mes.apiservice.unit.exception.MesException;
import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum;
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.MesPartShippingGroup;
import cn.estsh.i3plus.pojo.mes.bean.MesProdRuleNosortCfg;
import cn.estsh.i3plus.pojo.mes.bean.MesTimeEfficientCfg;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.impp.framework.boot.util.ValidatorBean;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.List;
@Service
@Slf4j
public class MesProdRuleNosortCfgService extends BaseMesService<MesProdRuleNosortCfg> implements IMesProdRuleNosortCfgService {
@Autowired
private IMesProdRuleNosortCfgDao mesProdRuleNosortCfgDao;
protected void setPackQueryBean(MesProdRuleNosortCfg bean, DdlPackBean packBean) {
DdlPreparedPack.getStringEqualPack(bean.getInPartNo(), "inPartNo", packBean);
@ -83,4 +88,13 @@ public class MesProdRuleNosortCfgService extends BaseMesService<MesProdRuleNosor
.build();
}
}
@Override
public MesProdRuleNosortCfg findMesProdRuleNosortCfgByWorkCenterCode(String workCenterCode, String partNo, String organizeCode) {
List<MesProdRuleNosortCfg> prodRuleNosortCfgList = mesProdRuleNosortCfgDao.findMesProdRuleNosortCfgByWorkCenterCode(workCenterCode, partNo, organizeCode);
if(CollectionUtils.isEmpty(prodRuleNosortCfgList)){
MesException.throwMesBusiException("产线【%s】产出零件【%s】对应的非排序工艺路线信息不存在",workCenterCode,partNo);
}
return prodRuleNosortCfgList.iterator().next();
}
}

@ -45,7 +45,7 @@ public class MesProdRuleSortCfgService extends BaseMesService<MesProdRuleSortCfg
DdlPackBean seriesPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(item.getWorkCellCode(), "workCellCode", seriesPackBean);
DdlPreparedPack.getStringEqualPack(item.getWorkCenterCode(), "workCenterCode", seriesPackBean);
DdlPreparedPack.getStringEqualPack(item.getAssemblyPartNo(), "partNo", seriesPackBean);
DdlPreparedPack.getStringEqualPack(item.getAssemblyPartNo(), "assemblyPartNo", seriesPackBean);
boolean flg = baseRDao.isExitByHql(seriesPackBean);
@ -69,8 +69,8 @@ public class MesProdRuleSortCfgService extends BaseMesService<MesProdRuleSortCfg
DdlPackBean seriesPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(item.getWorkCellCode(), "workCellCode", seriesPackBean);
DdlPreparedPack.getStringEqualPack(item.getWorkCenterCode(), "workCenterCode", seriesPackBean);
DdlPreparedPack.getStringEqualPack(item.getAssemblyPartNo(), "partNo", seriesPackBean);
DdlPreparedPack.getStringEqualPack(item.getAssemblyPartNo(), "assemblyPartNo", seriesPackBean);
DdlPreparedPack.getNumNOEqualPack(item.getId(), "id", seriesPackBean);
boolean flg = baseRDao.isExitByHql(seriesPackBean);
if (flg) {

@ -1,6 +1,8 @@
package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base;
import cn.estsh.i3plus.ext.mes.api.base.IMesWorkCenterService;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@ -9,5 +11,11 @@ import org.springframework.stereotype.Service;
@Slf4j
public class MesWorkCenterService extends BaseMesService<MesWorkCenter> implements IMesWorkCenterService {
@Override
protected void setPackQueryBean(MesWorkCenter bean, DdlPackBean packBean) {
DdlPreparedPack.getStringLikerPack(bean.getErpWorkCenter(), "erpWorkCenter", packBean);
DdlPreparedPack.getStringLikerPack(bean.getWorkCenterCode(), "workCenterCode", packBean);
DdlPreparedPack.getStringLikerPack(bean.getWorkCenterName(), "workCenterName", packBean);
}
}

@ -1,6 +1,7 @@
package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base;
import cn.estsh.i3plus.ext.mes.api.base.*;
import cn.estsh.i3plus.ext.mes.apiservice.config.AuthUtilExt;
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.pojo.constant.MesCommonConstant;
@ -31,7 +32,9 @@ import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
@Service
@Slf4j
@ -64,7 +67,16 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
private MesCustomerPartRepository mesCustomerPartRDao;
@Autowired
private IMesPartSapService iMesPartSapService;
@Autowired
private IMesMoveRuleService mesMoveRuleService;
@Autowired
private MesProdRuleSortCfgRepository mesProdRuleSortCfgRDao;
@Autowired
private IMesProdRuleNosortCfgService mesProdRuleNosortCfgService;
@Autowired
private IMesPartSapService mesPartSapService;
@Autowired
private MesMoveRepository mesMoveRDao;
@Override
public MesWorkOrder insert(MesWorkOrder bean) {
//插入前构造数据
@ -327,13 +339,13 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
MesException.throwMesBusiException("vin号【%s】重复", item.getVinCode());
}
}
//校验零件生产组信息
// MesPartProdGroupDetail mesPartProdGroupDetail = new MesPartProdGroupDetail();
// mesPartProdGroupDetail.setWorkCenterCode(item.getWorkCenterCode());
// mesPartProdGroupDetail.setPartNo(item.getPartNo());
// mesPartProdGroupDetail.setOrganizeCode(item.getOrganizeCode());
// List<MesPartProdGroup> mesPartProdGroup = mesPartProdGroupService.findMesPartProdGroup(mesPartProdGroupDetail);
//校验零件生产组信息
if(StringUtil.isEmpty(item.getPartProdGroupCode())){
MesPartProdGroup mesPartProdGroup = getMesPartProdGroup(item);
item.setPartProdGroupCode(mesPartProdGroup.getPartProdGroupCode());
item.setPartProdGroupName(mesPartProdGroup.getPartProdGroupName());
}
//排序工单数量为1
item.setQty(1d);
@ -387,6 +399,20 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
}
private MesPartProdGroup getMesPartProdGroup(MesWorkOrder item) {
MesPartProdGroupDetail mesPartProdGroupDetail = new MesPartProdGroupDetail();
mesPartProdGroupDetail.setWorkCenterCode(item.getWorkCenterCode());
mesPartProdGroupDetail.setPartNo(item.getPartNo());
mesPartProdGroupDetail.setOrganizeCode(item.getOrganizeCode());
List<MesPartProdGroup> mesPartProdGroupList = mesPartProdGroupService.findMesPartProdGroup(mesPartProdGroupDetail);
if(CollectionUtils.isEmpty(mesPartProdGroupList)){
MesException.throwMesBusiException("生产线代码【%s】零件号【%s】对应的零件生产组信息没有维护",
item.getWorkCenterCode(),item.getPartNo());
}
MesPartProdGroup mesPartProdGroup = mesPartProdGroupList.iterator().next();
return mesPartProdGroup;
}
private void getCustomerPart(MesWorkOrder item) {
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(item.getPartNo(), "erpPartNo", ddlPackBean);
@ -476,23 +502,9 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
MesException.throwMesBusiException("产线【%s】不存在", mesWorkOrder.getWorkCenterCode());
}
//获取生产版本
ddlPackBean = DdlPackBean.getDdlPackBean(mesWorkOrder.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(mesWorkOrder.getPartNo(), "partNo", ddlPackBean);
DdlPreparedPack.getStringEqualPack(mesWorkCenter.getErpWorkCenter(), "workCenterCode", ddlPackBean);
DdlPreparedPack.getStringEqualPack(mesWorkOrder.getProductVersion(), "productVersion", ddlPackBean);
MesProductVersion mesProductVersion = mesProductVersionRDao.getByProperty(ddlPackBean);
if (null == mesProductVersion) {
MesException.throwMesBusiException("物料【%s】生产版本信息不存在", mesWorkOrder.getPartNo());
}
MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrder);
//物料+生产版本获取bom信息
ddlPackBean = DdlPackBean.getDdlPackBean(mesWorkOrder.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(mesPart.getPartNo(), "partNo", ddlPackBean);
DdlPreparedPack.getStringEqualPack(mesProductVersion.getAlternativePartList(), "bomVersion", ddlPackBean);
List<MesBom> mesBoms = mesBomRDao.findByHqlWhere(ddlPackBean);
if (CollectionUtils.isEmpty(mesBoms)) {
MesException.throwMesBusiException("物料【%s】生产版本【%s】对应bom信息不存在",
mesWorkOrder.getPartNo(), mesProductVersion.getProductVersion());
}
List<MesBom> mesBoms = getMesBoms(mesWorkOrder, mesPart, mesProductVersion);
//报工类型
if (MesExtEnumUtil.REPORT_TYPE.REPORT.getValue() == mesWorkOrder.getReportType()) {
mesWorkOrder.setReportedQty(MathOperation.add(mesWorkOrder.getNum(), mesWorkOrder.getReportedQty()));
@ -525,26 +537,261 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
update(mesWorkOrder);
//生成条码
// todo
GenSerialNoModel genSerialNoModel = new GenSerialNoModel(MesCommonConstant.REPORT_SN);
genSerialNoModel.setPartNo(mesWorkOrder.getPartNo());
List<String> resultList = syncFuncService.syncSerialNo(genSerialNoModel, mesWorkOrder.getCreateUser(), mesWorkOrder.getOrganizeCode(), mesWorkOrder.getNum()).getResultList();
List<String> resultList = getStringList(mesWorkOrder);
//保存数据
List<MesProductOffLine> mesProductOffLineList = new ArrayList<>();
MesProductOffLine newMesProductOffLine;
for (String sn : resultList) {
for (MesBom mesBom : mesBoms) {
mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrder, mesProductVersion, sn, mesBom,false));
}
}
mesProductOffLineService.insertBatch(mesProductOffLineList);
}
@Override
public void doProductReportExt(MesWorkOrder mesWorkOrderNew) {
MesWorkOrder mesWorkOrder = baseRDao.getById(mesWorkOrderNew.getId());
if(Objects.isNull(mesWorkOrder)){
MesException.throwMesBusiException("工单id为【%s】工单信息不存在",mesWorkOrderNew.getId());
}
//查询物料信息
MesPart mesPart = iMesPartService.getPartByPartNo(mesWorkOrder.getPartNo(), mesWorkOrder.getOrganizeCode());
if(mesWorkOrderNew.getNum() <= 0){
MesException.throwMesBusiException("工单报工数量不能为0,不允许报工");
}
//报工类型
//报工
if (MesExtEnumUtil.REPORT_TYPE.REPORT.getValue() == mesWorkOrder.getReportType()) {
mesWorkOrder.setReportedQty(MathOperation.add(mesWorkOrderNew.getNum(), mesWorkOrder.getReportedQty()));
} else {
//冲销数量大于工单完成数量报错
if (mesWorkOrderNew.getNum() > mesWorkOrder.getReportedQty()) {
MesException.throwMesBusiException("冲销数量【%s】大于工单完成数量【%s】,不允许冲销",
mesWorkOrderNew.getNum(), mesWorkOrder.getReportedQty());
}
//报工调整数量加-
mesWorkOrder.setAdjustQty((MathOperation.add(mesWorkOrderNew.getNum(), mesWorkOrder.getAdjustQty())));
//已汇报数量减一
mesWorkOrder.setReportedQty(MathOperation.sub(mesWorkOrder.getReportedQty(), mesWorkOrderNew.getNum()));
}
//更新工单状态
double unCompleteQty = MathOperation.sub(mesWorkOrder.getQty(), mesWorkOrder.getReportedQty());
mesWorkOrder.setUnCompleteQty(unCompleteQty > 0 ? unCompleteQty : 0);
if (mesWorkOrder.getReportedQty() > mesWorkOrder.getQty()) {
MesException.throwMesBusiException("工单报工数量大于工单数量【%s】,不允许报工", mesWorkOrder.getQty());
} else if (Objects.equals(mesWorkOrder.getReportedQty(), mesWorkOrder.getQty())) {
mesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue());
} else {
mesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.process.getValue());
}
//获取生产版本
MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrder);
//物料+生产版本获取bom信息
List<MesBom> mesBoms = getMesBoms(mesWorkOrder, mesPart, mesProductVersion);
//生成条码
List<String> resultList = getStringList(mesWorkOrderNew);
//保存数据
List<MesProductOffLine> mesProductOffLineList = new ArrayList<>();
List<MesMove> mesMoveList = new ArrayList<>();
boolean isReport = false;
boolean isMove = false;
//排序工单
if(MesExtEnumUtil.ORDER_TYPE.SORT.getValue() == mesWorkOrder.getWorkOrderType()){
//报工类型
if (MesExtEnumUtil.REPORT_TYPE.WRITE_OFF.getValue() == mesWorkOrder.getReportType()) {
MesException.throwMesBusiException("工单【%s】为排序工单不允许冲销",mesWorkOrder.getWorkOrderNo());
}
//排序加工规则
MesProdRuleSortCfg mesProdRuleSortCfg = getMesProdRuleSortCfg(mesWorkOrder);
if(MesExtEnumUtil.MES_REPORT_TYPE.REPORT.getValue() == mesProdRuleSortCfg.getReportType()){
isReport = true;
} else if (MesExtEnumUtil.MES_REPORT_TYPE.MOVE.getValue() == mesProdRuleSortCfg.getReportType()) {
isMove = true;
}else if (MesExtEnumUtil.MES_REPORT_TYPE.REPORT_MOVE.getValue() == mesProdRuleSortCfg.getReportType()) {
isReport = true;
isMove = true;
}else if (MesExtEnumUtil.MES_REPORT_TYPE.CUSTOMER_SUPPLY_MOVE.getValue() == mesProdRuleSortCfg.getReportType()) {
customerSupplyMove(mesWorkOrder, mesProductVersion, mesBoms, resultList, mesProductOffLineList, mesMoveList);
}else{
log.info("工单{}排序加工规则报工类型未维护",mesWorkOrder.getWorkOrderNo());
return;
}
if(MesExtEnumUtil.MES_REPORT_TYPE.CUSTOMER_SUPPLY_MOVE.getValue() != mesProdRuleSortCfg.getReportType()){
//查询SAP物料信息
MesPartSap mesPartSap = mesPartSapService.getMesPartSapByPartNo(mesWorkOrder.getPartNo(), mesWorkOrder.getOrganizeCode());
for (String sn : resultList) {
//成品汇报
if(isReport){
for (MesBom mesBom : mesBoms) {
mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrder, mesProductVersion, sn, mesBom,false));
}
}
//成品移库
if(isMove){
MesMove move = createMove(mesPartSap, mesProdRuleSortCfg.getSrcErpLocation(), mesProdRuleSortCfg.getDestErpLocation(), mesWorkOrder.getOrganizeCode(), 1d,sn,MesExtEnumUtil.MOVE_TYPE.FINISH_PRODUCTS_MOVE.getValue());
move.setMatnr(mesWorkOrder.getPartNo());
mesMoveList.add(move);
}
}
}
} else if (MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue() == mesWorkOrder.getWorkOrderType()) {
MesProdRuleNosortCfg mesProdRuleNoSortCfg = mesProdRuleNosortCfgService.findMesProdRuleNosortCfgByWorkCenterCode(mesWorkOrder.getWorkCenterCode(),mesWorkOrder.getPartNo(),mesWorkOrder.getOrganizeCode());
if( CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == mesProdRuleNoSortCfg.getReportType()){
for (String sn : resultList) {
for (MesBom mesBom : mesBoms) {
mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrderNew, mesProductVersion, sn, mesBom,false));
}
}
}
}else {
log.info("工单{}排序规则不属于排序工单和非排序工单",mesWorkOrder.getWorkOrderNo());
return;
}
//更新工单
update(mesWorkOrder);
//保存报工记录
if(CollectionUtils.isNotEmpty(mesProductOffLineList)){
mesProductOffLineService.insertBatch(mesProductOffLineList);
}
//保存移库记录
if(CollectionUtils.isNotEmpty(mesMoveList)){
mesMoveRDao.saveAll(mesMoveList);
}
}
@Override
public void deleteUnSortOrder(String userName, String organizeCode) {
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
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[]{userName, TimeTool.getNowTime(true),MesExtEnumUtil.ORDER_STATUS.CLOSE.getValue()},ddlPackBean);
}
private void customerSupplyMove(MesWorkOrder mesWorkOrder, MesProductVersion mesProductVersion, List<MesBom> mesBoms, List<String> resultList, List<MesProductOffLine> mesProductOffLineList, List<MesMove> mesMoveList) {
boolean isItemMove;
boolean isItemReport;
MesMoveRule moveRule;
//查询零件生产组的移库规则
List<MesMoveRule> moveRules = mesMoveRuleService.findMesMoveRuleByPartProdGroupCode(mesWorkOrder.getPartProdGroupCode(), mesWorkOrder.getOrganizeCode());
Map<String, List<MesMoveRule>> mesMoveRuleMap = moveRules.stream().filter(t -> Objects.nonNull(t.getSrcType())).collect(Collectors.groupingBy(MesMoveRule::getSrcType));
List<String> itemPartNoList = mesBoms.stream().map(MesBom::getItemPartNo).collect(Collectors.toList());
//子物料SAP下发信息
Map<String, List<MesPartSap>> mesPartSapMap = getPartSapMap(mesWorkOrder, itemPartNoList);
//获取物料信息
Map<String, List<MesPart>> itemPartMap = getItemPartMap(mesWorkOrder, itemPartNoList);
for (String sn : resultList) {
for (MesBom mesBom : mesBoms) {
isItemReport = false;
isItemMove = false;
moveRule = null;
if(itemPartMap.containsKey(mesBom.getItemPartNo())){
MesPart itemPart = itemPartMap.get(mesBom.getItemPartNo()).iterator().next();
if(!StringUtil.isEmpty(itemPart.getEsd()) && mesMoveRuleMap.containsKey(itemPart.getEsd())){
moveRule = mesMoveRuleMap.get(itemPart.getEsd()).iterator().next();
if (MesExtEnumUtil.MOVE_TYPE_REPORT_TYPE.REPORT_MOVE.getValue() == moveRule.getReportType()) {
isItemMove = true;
isItemReport = true;
} else if (MesExtEnumUtil.MOVE_TYPE_REPORT_TYPE.REPORT.getValue() == moveRule.getReportType()) {
isItemReport = true;
} else if (MesExtEnumUtil.MOVE_TYPE_REPORT_TYPE.MOVE.getValue() == moveRule.getReportType()) {
isItemMove = true;
}
}
}
//汇报
if(isItemReport){
mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrder, mesProductVersion, sn, mesBom,true));
}
//移库
if(isItemMove){
MesPartSap mesPartSap = null;
if(mesPartSapMap.containsKey(mesBom.getItemPartNo())){
mesPartSap = mesPartSapMap.get(mesBom.getItemPartNo()).iterator().next();
}
MesMove move = createMove(mesPartSap, moveRule.getErpSrcLocateNo(), moveRule.getErpDestLocateNo(), mesBom.getOrganizeCode(), mesBom.getItemQty(),"",MesExtEnumUtil.MOVE_TYPE.RAW_MATERIAL_MOVE.getValue());
move.setMatnr(mesBom.getItemPartNo());
mesMoveList.add(move);
}
}
}
}
private Map<String, List<MesPartSap>> getPartSapMap(MesWorkOrder mesWorkOrder, List<String> itemPartNoList) {
List<MesPartSap> mesPartSapList = mesPartSapService.findMesPartSapByPartNoList(itemPartNoList, mesWorkOrder.getOrganizeCode());
Map<String, List<MesPartSap>> mesPartSapMap = mesPartSapList.stream().filter(t -> Objects.nonNull(t.getPartNo())).collect(Collectors.groupingBy(MesPartSap::getPartNo));
return mesPartSapMap;
}
private Map<String, List<MesPart>> getItemPartMap(MesWorkOrder mesWorkOrder, List<String> itemPartNoList) {
List<MesPart> itemPartList = iMesPartService.findMesPartByPartNoList(itemPartNoList, mesWorkOrder.getOrganizeCode());
Map<String, List<MesPart>> itemPartMap = itemPartList.stream().filter(t -> Objects.nonNull(t.getPartNo())).collect(Collectors.groupingBy(MesPart::getPartNo));
return itemPartMap;
}
private MesProdRuleSortCfg getMesProdRuleSortCfg(MesWorkOrder mesWorkOrder) {
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(mesWorkOrder.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(mesWorkOrder.getPartNo(),"reportPartNo",ddlPackBean);
DdlPreparedPack.getStringEqualPack(mesWorkOrder.getWorkCenterCode(),"workCenterCode",ddlPackBean);
MesProdRuleSortCfg mesProdRuleSortCfg = mesProdRuleSortCfgRDao.getByProperty(ddlPackBean);
if(Objects.isNull(mesProdRuleSortCfg)){
MesException.throwMesBusiException("产线【%s】物料【%s】排序加工规则未维护", mesWorkOrder.getWorkCenterCode(), mesWorkOrder.getPartNo());
}
return mesProdRuleSortCfg;
}
private List<String> getStringList(MesWorkOrder mesWorkOrder) {
GenSerialNoModel genSerialNoModel = new GenSerialNoModel(MesCommonConstant.REPORT_SN);
List<String> resultList = syncFuncService.syncSerialNo(genSerialNoModel, mesWorkOrder.getCreateUser(), mesWorkOrder.getOrganizeCode(), mesWorkOrder.getNum()).getResultList();
return resultList;
}
private List<MesBom> getMesBoms(MesWorkOrder mesWorkOrder, MesPart mesPart, MesProductVersion mesProductVersion) {
DdlPackBean ddlPackBean;
ddlPackBean = DdlPackBean.getDdlPackBean(mesWorkOrder.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(mesPart.getPartNo(), "partNo", ddlPackBean);
DdlPreparedPack.getStringEqualPack(mesProductVersion.getAlternativePartList(), "bomVersion", ddlPackBean);
List<MesBom> mesBoms = mesBomRDao.findByHqlWhere(ddlPackBean);
if (CollectionUtils.isEmpty(mesBoms)) {
MesException.throwMesBusiException("物料【%s】生产版本【%s】对应bom信息不存在",
mesWorkOrder.getPartNo(), mesProductVersion.getProductVersion());
}
return mesBoms;
}
private MesProductVersion getMesProductVersion(MesWorkOrder mesWorkOrder) {
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(mesWorkOrder.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(mesWorkOrder.getPartNo(), "partNo", ddlPackBean);
DdlPreparedPack.getStringEqualPack(mesWorkOrder.getErpWorkCenter(), "workCenterCode", ddlPackBean);
DdlPreparedPack.getStringEqualPack(mesWorkOrder.getProductVersion(), "productVersion", ddlPackBean);
MesProductVersion mesProductVersion = mesProductVersionRDao.getByProperty(ddlPackBean);
if (null == mesProductVersion) {
MesException.throwMesBusiException("物料【%s】生产版本信息不存在", mesWorkOrder.getPartNo());
}
return mesProductVersion;
}
private MesProductOffLine creatMesProductOffLine(MesWorkOrder mesWorkOrder, MesProductVersion mesProductVersion,
String sn, MesBom mesBom,boolean isItemReport) {
MesProductOffLine newMesProductOffLine;
newMesProductOffLine = new MesProductOffLine();
if(!isItemReport){
newMesProductOffLine.setReportPartNo(mesWorkOrder.getPartNo());
newMesProductOffLine.setReportPartNameRdd(mesWorkOrder.getPartName());
}
newMesProductOffLine.setReportSn(sn);
newMesProductOffLine.setItemPartNo(mesBom.getItemPartNo());
newMesProductOffLine.setItemPartName(mesBom.getItemPartName());
newMesProductOffLine.setItemQty(mesBom.getItemQty());
newMesProductOffLine.setAlort(mesProductVersion.getReceiveInventoryPoint());
newMesProductOffLine.setStgeLoc(mesProductVersion.getShipInventoryPoint());
newMesProductOffLine.setQty(1d);
newMesProductOffLine.setReportSn(sn);
newMesProductOffLine.setBomVersion(mesWorkOrder.getProductVersion());
newMesProductOffLine.setSerialNumber(sn);
newMesProductOffLine.setUnit(mesBom.getUnit());
@ -553,14 +800,11 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
newMesProductOffLine.setWorkCenterCode(mesWorkOrder.getWorkCenterCode());
newMesProductOffLine.setWorkCellCode(mesWorkOrder.getWorkCellCode());
newMesProductOffLine.setReportType(mesWorkOrder.getReportType());
newMesProductOffLine.setSapWorkCenter(mesWorkCenter.getErpWorkCenter());
newMesProductOffLine.setSapWorkCenter(mesWorkOrder.getErpWorkCenter());
newMesProductOffLine.setOrganizeCode(mesWorkOrder.getOrganizeCode());
ConvertBean.serviceModelInitialize(newMesProductOffLine, mesWorkOrder.getCreateUser());
mesProductOffLineList.add(newMesProductOffLine);
}
}
mesProductOffLineService.insertBatch(mesProductOffLineList);
return newMesProductOffLine;
}
@Override
@ -581,4 +825,22 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
DdlPreparedPack.getInPackList(statusList, "workOrderStatus", packBean);
return mesWorkOrderRDao.findByHqlWhere(packBean);
}
private MesMove createMove(MesPartSap mesPart , String source, String target, String org,double qty,String sn,Integer moveType) {
MesMove move = new MesMove();
if(!Objects.isNull(mesPart)){
move.setMeins(mesPart.getUnit());
}
move.setOrganizeCode(org);
move.setFactoryCode(org);
move.setLgort(source);
move.setUmlgo(target);
move.setMenge(qty);
move.setPostDate(TimeTool.getToday());
move.setProductSn(sn);
move.setMoveType(moveType);
move.setPostTime(TimeTool.getTimeShortWithColon());
ConvertBean.serviceModelInitialize(move, AuthUtil.getSessionUser().getUserName());
return move;
}
}

@ -90,7 +90,7 @@ public class MesTimeRoundnessService implements IRoundnessStrategy {
MesWorkOrder mesWorkOrder = new MesWorkOrder();
mesWorkOrder.setWorkOrderType(MesExtEnumUtil.ORDER_TYPE.BTO.getValue());
mesWorkOrder.setWorkOrderSeq(createSeq.toString());
mesWorkOrder.setProduceSeq(createSeq.toString());
mesWorkOrder.setProduceSeq(createSeq);
mesWorkOrder.setOrganizeCode(detail.getOrganizeCode());
//产线
mesWorkOrder.setWorkCenterCode(detail.getWorkCenterCode());

@ -6,9 +6,13 @@ import cn.estsh.i3plus.ext.mes.api.busi.IMesSpotCheckOrderResultService;
import cn.estsh.i3plus.ext.mes.api.busi.IMesSpotCheckOrderService;
import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.BaseMesService;
import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.icloud.core.sdk.ICoreUtilCloud;
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.TimeTool;
import cn.estsh.i3plus.platform.common.util.WmsConstWords;
import cn.estsh.i3plus.pojo.base.bean.BaseResultBean;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
@ -30,6 +34,7 @@ import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
@Service
@ -57,7 +62,8 @@ public class MesSpotCheckOrderService extends BaseMesService<MesSpotCheckOrder>
@Autowired
private ISyncFuncService syncFuncService;
@Autowired
private ICoreUtilCloud sysOrderNoRuleCloud;
@Override
public MesSpotCheckOrder insert(MesSpotCheckOrder bean) {
onInsertBean(bean);
@ -109,13 +115,20 @@ public class MesSpotCheckOrderService extends BaseMesService<MesSpotCheckOrder>
}
//生成单据号
GenSerialNoModel genSerialNoModel = new GenSerialNoModel(MesCommonConstant.SPOT_CHECK_ORDER_NO_RULE);
List<String> resultList = syncFuncService.syncSerialNo(genSerialNoModel, bean.getCreateUser(), bean.getOrganizeCode(), 1).getResultList();
// GenSerialNoModel genSerialNoModel = new GenSerialNoModel(MesCommonConstant.SPOT_CHECK_ORDER_NO_RULE);
// List<String> resultList = syncFuncService.syncSerialNo(genSerialNoModel, bean.getCreateUser(), bean.getOrganizeCode(), 1).getResultList();
String orderNo="";
BaseResultBean<LinkedHashMap> orderResutlBean = sysOrderNoRuleCloud.getOrderNo(MesCommonConstant.SPOT_CHECK_ORDER_NO_RULE);
if (orderResutlBean != null && orderResutlBean.isSuccess()) {
orderNo = orderResutlBean.getResultObject().get(WmsConstWords.CORE_ORDER_NO).toString();
} else {
orderNo = TimeTool.getDateTime().replaceAll("-", "") + String.valueOf((int) (Math.random() * 9000) + 1000);
}
//保存单据
BeanUtils.copyProperties(equipmentSpotCheck, bean, "id");
// bean.setSpotCheckOrderNo("SPOT_CHECK_ORDER_NO_0003");
bean.setSpotCheckOrderNo(resultList.get(0));
bean.setSpotCheckOrderNo(orderNo);
ConvertBean.serviceModelInitialize(bean, AuthUtil.getSessionUser().getUserName());
bean = baseRDao.insert(bean);
@ -149,10 +162,10 @@ public class MesSpotCheckOrderService extends BaseMesService<MesSpotCheckOrder>
// ConvertBean.serviceModelInitialize(spotCheckOrderPart, "LML");
spotCheckOrderPartList.add(spotCheckOrderPart);
});
spotCheckOrderPartService.insertBatch(spotCheckOrderPartList);
spotCheckOrderPartRepository.saveAll(spotCheckOrderPartList);
}
spotCheckOrderResultService.insertBatch(spotCheckOrderResults);
spotCheckOrderResultRepository.saveAll(spotCheckOrderResults);
return bean;
}
@ -364,6 +377,7 @@ public class MesSpotCheckOrderService extends BaseMesService<MesSpotCheckOrder>
DdlPreparedPack.getStringLikerPack(bean.getWorkCellCode(),"workCellCode",packBean);
DdlPreparedPack.getStringLikerPack(bean.getSpotCheckCode(),"spotCheckCode",packBean);
DdlPreparedPack.getStringLikerPack(bean.getSpotCheckName(),"spotCheckName",packBean);
DdlPreparedPack.getStringLikerPack(bean.getEquipCode(),"equipCode",packBean);
DdlPreparedPack.getNumEqualPack(bean.getStatus(),"status",packBean);
DdlPreparedPack.getNumEqualPack(bean.getSpotCheckOrderResult(),"spotCheckOrderResult",packBean);
DdlPreparedPack.getStringLikerPack(bean.getEquipName(),"equipName",packBean);

Loading…
Cancel
Save