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

tags/yfai-mes-ext-v1.0
logic.fang 10 months ago
commit 4d68d813e3

@ -1,6 +1,7 @@
package cn.estsh.i3plus.ext.mes.api.base;
import cn.estsh.i3plus.pojo.mes.bean.MesPartShippingGroup;
import io.swagger.annotations.ApiOperation;
/**
* @Description:
@ -9,5 +10,7 @@ import cn.estsh.i3plus.pojo.mes.bean.MesPartShippingGroup;
*/
public interface IMesPartShippingGroupService extends IBaseMesService<MesPartShippingGroup> {
@ApiOperation(value = "查询发运组数据")
MesPartShippingGroup getMesPartShippingGroup(String organizeCode,String shippingGroupCode);
}

@ -2,6 +2,7 @@ package cn.estsh.i3plus.ext.mes.api.base;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter;
import io.swagger.annotations.ApiOperation;
/**
* @Description:
@ -10,5 +11,10 @@ import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter;
*/
public interface IMesWorkCenterService extends IBaseMesService<MesWorkCenter> {
@ApiOperation(value = "根据生产线代码查询生产线信息")
MesWorkCenter getWorkCenterDb(String organizeCode, String workCenterCode);
@ApiOperation(value = "根据生产线代码查询生产线信息的ERP生产线代码")
String getErpWorkCenterCode(String organizeCode, String workCenterCode);
}

@ -0,0 +1,33 @@
package cn.estsh.i3plus.ext.mes.api.base.file;
import cn.estsh.i3plus.pojo.platform.bean.SysFile;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
/**
* @Description :
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/7/19 11:54
* @Modify:
**/
public interface IMesFileService {
/**
*
* @param file
* @return
*/
@ApiOperation(value = "上传文件", notes = "上传文件")
SysFile uploadFile(MultipartFile file);
/**
*
* @param resp
* @param fileUrl url
* @return
*/
void getFileByUrl(HttpServletResponse resp, String fileUrl);
}

@ -0,0 +1,17 @@
package cn.estsh.i3plus.ext.mes.api.busi;
import cn.estsh.i3plus.pojo.mes.bean.MesDefectType;
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
import io.swagger.annotations.ApiOperation;
/**
* @Description :
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/7/19 15:32
* @Modify:
**/
public interface IMesInputDefectRecordService {
@ApiOperation(value = "生成缺陷记录")
void savePartInspection(MesProduceSn mesProduceSn, String userName, MesDefectType mesDefect,String defectLocation);
}

@ -0,0 +1,62 @@
import cn.estsh.i3plus.platform.common.tool.MathOperation
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement
import cn.estsh.i3plus.pojo.mes.dbinterface.MesInterfaceDataMapper
import cn.estsh.i3plus.pojo.mes.repository.MesShippingOrderManagementRepository
import org.slf4j.Logger
import org.slf4j.LoggerFactory
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.util.StringUtils
/**
* @Description : MES2PISCES-
* @Reference :
* @Author : gsz
* @CreateDate 2024/7/14 10:59
* @Modify:
* */
class MesToPiscesMesJisShipping {
public static final Logger LOGGER = LoggerFactory.getLogger(MesToPiscesMesJisShipping.class)
@Autowired
private MesShippingOrderManagementRepository mesShippingOrderManagementRepository;
def filterData(MesInterfaceDataMapper mapper, List<Map<String, Object>> srcData) throws Exception {
if (srcData == null || srcData.size() == 0) {
return srcData
}
Map<String, MesShippingOrderManagement> mesPartShippingGroupMap = new HashMap<>();
String organizeCode = mapper.getOrganizeCode();
Map<String, Map<String, Object>> destData = new HashMap<>();
for (Map<String, Object> rowMap : srcData) {
if (!StringUtils.isEmpty(rowMap.get("shipping_order_code"))) {
MesShippingOrderManagement mesShipping = getMesShipping(organizeCode, String.valueOf(rowMap.get("shipping_order_code")), mesPartShippingGroupMap)
if (!Objects.isNull(mesShipping)) {
rowMap.put("HANDLE_FID", mesShipping.getFid())
} else {
LOGGER.info("shipping_order_code:{}信息不存在", String.valueOf(rowMap.get("shipping_order_code")))
}
}
//
String key = String.valueOf(rowMap.get("HANDLE_FID")) + String.valueOf("part_no")
if (destData.containsKey(key)) {
destData.get(key).put("quantity_per_car", MathOperation.add(Double.valueOf(destData.get(key).get("quantity_per_car") + ""), Double.valueOf(rowMap.get("quantity_per_car") + "")))
} else {
destData.put(key, rowMap)
}
}
return new ArrayList<>(destData.values());
}
private MesShippingOrderManagement getMesShipping(String organizeCode, String shippingCode, Map<String, MesShippingOrderManagement> mesPartShippingGroupMap) {
if (Objects.isNull(mesPartShippingGroupMap) || !mesPartShippingGroupMap.containsKey(shippingCode)) {
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(shippingCode, "shippingCode", ddlPackBean);
mesPartShippingGroupMap.put(shippingCode, mesShippingOrderManagementRepository.getByProperty(ddlPackBean))
}
return mesPartShippingGroupMap.get(shippingCode);
}
}

@ -0,0 +1,58 @@
import cn.estsh.i3plus.platform.plugin.datasource.DynamicDataSourceProxy
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean
import cn.estsh.i3plus.pojo.mes.bean.MesCrossOrganizeCfg
import cn.estsh.i3plus.pojo.mes.dbinterface.MesInterfaceDataMapper
import cn.estsh.i3plus.pojo.mes.repository.IMesCrossOrganizeCfgRepository
import org.slf4j.Logger
import org.slf4j.LoggerFactory
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate
import org.springframework.util.CollectionUtils
import javax.annotation.Resource
/**
* @Description :
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/7/22 11:03
* @Modify:
* */
class PiscesToMesProductSn {
public static final Logger LOGGER = LoggerFactory.getLogger(PiscesToMesProductSn.class)
@Autowired
private IMesCrossOrganizeCfgRepository mesCrossOrganizeCfgRepository;
@Resource(name = "pisces1DataSource")
private DynamicDataSourceProxy pisces1DataSource;
def readData(MesInterfaceDataMapper mapper) throws Exception {
String organizeCode = mapper.getOrganizeCode();
List<MesCrossOrganizeCfg> crossOrganizeCfgList = mesCrossOrganizeCfgRepository.findByHqlWhere(DdlPackBean.getDdlPackBean(organizeCode));
if (CollectionUtils.isEmpty(crossOrganizeCfgList)) {
LOGGER.info("未查询到跨工厂配置");
return new ArrayList<>();
}
List<Map<String, Object>> srcData = new ArrayList<>();
//
for (MesCrossOrganizeCfg crossOrganizeCfg : crossOrganizeCfgList) {
Map<String, Object> params = new HashMap<>();
params.put("srcOrganizeCode", crossOrganizeCfg.getSrcOrganizeCode())
params.put("partNo", crossOrganizeCfg.getPartNo())
String sql = "select top "+mapper.getSrcGetLimit()+" * from " + mapper.getSrcTableName() + " where PLANT = :srcOrganizeCode and PART_NO = :partNo and " + mapper.getSrcWhere() + " order by "+mapper.getSrcOrderBy()
//
List<Map<String, Object>> dataList = queryDataTable(sql, params);
if (!CollectionUtils.isEmpty(dataList)) {
srcData.addAll(dataList);
}
}
return srcData;
}
private List<Map<String, Object>> queryDataTable(String sql, Map<String, Object> params) {
NamedParameterJdbcTemplate namedJdbcTemplate = new NamedParameterJdbcTemplate(pisces1DataSource.getDataSource())
return namedJdbcTemplate.queryForList(sql, params);
}
}

@ -1,10 +1,18 @@
import cn.estsh.i3plus.ext.mes.api.busi.IMesInputDefectRecordService
import cn.estsh.i3plus.platform.common.tool.TimeTool
import cn.estsh.i3plus.platform.plugin.datasource.DynamicDataSourceProxy
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean
import cn.estsh.i3plus.pojo.base.codemaker.SnowflakeIdMaker
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack
import cn.estsh.i3plus.pojo.mes.bean.MesDefectType
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn
import cn.estsh.i3plus.pojo.mes.dbinterface.MesInterfaceDataMapper
import cn.estsh.i3plus.pojo.mes.repository.MesDefectTypeRepository
import cn.estsh.i3plus.pojo.mes.repository.MesProduceSnRepository
import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderToSapRepository
import lombok.Getter
import lombok.Setter
import org.apache.commons.collections.CollectionUtils
import org.slf4j.Logger
import org.slf4j.LoggerFactory
import org.springframework.beans.factory.annotation.Autowired
@ -33,6 +41,15 @@ class sapToMesCcscTaskResult {
@Resource(name = "mesDataSource")
private DynamicDataSourceProxy mesDataSource;
@Autowired
private MesProduceSnRepository mesProduceSnRepository;
@Autowired
private IMesInputDefectRecordService mesInputDefectRecordService;
@Autowired
private MesDefectTypeRepository mesDefectTypeRepository;
@Getter
@Setter
private Connection mesConn;
@ -46,6 +63,7 @@ class sapToMesCcscTaskResult {
List<Map<String, Object>> destData = new ArrayList<>();
List<String> insertSqlList = new ArrayList<>();
MesDefectType mesDefect = null;
for (Map<String, Object> rowMap : srcData) {
String organizeCode = String.valueOf(rowMap.get("WERKS"));
String taskNo = rowMap.get("task_no").toString();
@ -89,12 +107,18 @@ class sapToMesCcscTaskResult {
, part_no, part_no, part_no, 1, work_cell_code, work_center_code,
snowflakeIdMaker.nextId(), organizeCode, TimeTool.getNowTime(true), "CCSC_SAP");
insertSqlList.add(insertSql);
//
String sqlWorkSn = "update mes_produce_sn set qc_status=30 " +
" where organize_code= '"+organizeCode+"' and work_center_code= '"+work_center_code+"' " +
" and work_cell_code= '"+work_cell_code+"' "+
" and part_no= '"+part_no+"'; ";
insertSqlList.add(sqlWorkSn);
//
List<MesProduceSn> mesProduceSnList = getMesProduceSn(organizeCode, work_center_code, work_cell_code, part_no)
if(CollectionUtils.isNotEmpty(mesProduceSnList)){
if(Objects.isNull(mesDefect)){
mesDefect = getMesDefect(organizeCode)
}
//
for (MesProduceSn mesProduceSn : mesProduceSnList) {
mesInputDefectRecordService.savePartInspection(mesProduceSn, "JOB",mesDefect,"A01")
}
}
}
}
@ -114,6 +138,20 @@ class sapToMesCcscTaskResult {
return destData;
}
private MesDefectType getMesDefect(String organizeCode) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode)
DdlPreparedPack.getStringEqualPack("CCSC", "defectTypeCode", packBean);
return mesDefectTypeRepository.getByProperty(packBean)
}
private List<MesProduceSn> getMesProduceSn(String organizeCode, String work_center_code, String work_cell_code, String part_no) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode)
DdlPreparedPack.getStringEqualPack(work_center_code, "workCenterCode", packBean);
DdlPreparedPack.getStringEqualPack(work_cell_code, "workCellCode", packBean);
DdlPreparedPack.getStringEqualPack(part_no, "partNo", packBean);
return mesProduceSnRepository.findByHqlWhere(packBean)
}
private List<Map<String, Object>> queryDataTable(String sql, Map<String, Object> params) {
NamedParameterJdbcTemplate namedJdbcTemplate = new NamedParameterJdbcTemplate(mesDataSource.getDataSource())

@ -326,7 +326,7 @@ public class ExtProdOrgController extends MesBaseController {
.notNull(MesConstWords.WORK_CENTER_CODE, workCell.getWorkCenterCode())
.notNull(MesCommConstWords.AREA_CODE, workCell.getAreaCode());
mesWorkCellService.update(workCell);
prodOrgService.updateMesWorkCell(workCell);
return ResultBean.success("修改成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
} catch (ImppBusiException busExcep) {
return ResultBean.fail(busExcep);

@ -0,0 +1,68 @@
package cn.estsh.i3plus.ext.mes.apiservice.cus_suit;
import cn.estsh.i3plus.platform.common.util.CommonConstWords;
import cn.estsh.i3plus.platform.plugin.datasource.DynamicDataSourceProxy;
import lombok.Getter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.concurrent.TimeUnit;
/**
* @Description : pisces1
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/7/9 11:14
* @Modify:
**/
@Configuration
public class Pisces1Properties {
public static final Logger LOGGER = LoggerFactory.getLogger(CommonConstWords.SYSTEM_LOG);
/***********************
* pisces1
*/
@Value("${impp.pisces1.datasource.isopen}")
@Getter
private boolean piscesIsOpen;
@Value("${impp.pisces1.datasource.driver-class-name}")
@Getter
private String piscesDriverClassName;
@Value("${impp.pisces1.datasource.alias}")
@Getter
private String piscesDsAlias;
@Value("${impp.pisces1.datasource.jdbc-url}")
@Getter
private String piscesDsJdbcUrl;
@Value("${impp.pisces1.datasource.username}")
@Getter
private String piscesDsUsername;
@Value("${impp.pisces1.datasource.password}")
@Getter
private String piscesDsPassword;
@ConditionalOnExpression("'${impp.pisces1.datasource.isopen:false}' == 'true'")
@Bean(name = "pisces1DataSource")
public DynamicDataSourceProxy initPiscesCustomerSet(){
LOGGER.info("【初始化客户定制化...】");
/**
*
*/
LOGGER.info("【客户定制化pisces1数据源加载...】");
DynamicDataSourceProxy piscesDataSource = DynamicDataSourceProxy.initDataSourceFactory(this.getPiscesDriverClassName(),
this.getPiscesDsJdbcUrl(),this.getPiscesDsUsername(),this.getPiscesDsPassword(),TimeUnit.MINUTES.toMillis(30));
return piscesDataSource;
}
}

@ -60,7 +60,6 @@ public class PiscesProperties {
*
*/
LOGGER.info("【客户定制化pisces数据源加载...】");
//安道拓定制业务
DynamicDataSourceProxy piscesDataSource = DynamicDataSourceProxy.initDataSourceFactory(this.getPiscesDriverClassName(),
this.getPiscesDsJdbcUrl(),this.getPiscesDsUsername(),this.getPiscesDsPassword(),TimeUnit.MINUTES.toMillis(30));

@ -69,7 +69,12 @@ public class MesModuleExcelDaoImpl implements IMesModuleExcelDao {
hql.append(" and mem.isValid = :isValid ");
hql.append(" and mem.isDeleted = :isDeleted ");
if (!StringUtils.isEmpty(mesModuleExcel.getModuleCode())) {
hql.append(" and mem.moduleCode like :moduleCode ");
//主数据单独下载模版时不能模糊查询
if (!StringUtils.isEmpty(mesModuleExcel.getQueryIsAllowLike()) && mesModuleExcel.getQueryIsAllowLike().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) {
hql.append(" and mem.moduleCode like :moduleCode ");
} else {
hql.append(" and mem.moduleCode = :moduleCode ");
}
}
if (!StringUtils.isEmpty(mesModuleExcel.getModuleName())) {
hql.append(" and mem.moduleName like :moduleName ");
@ -82,7 +87,11 @@ public class MesModuleExcelDaoImpl implements IMesModuleExcelDao {
query.setParameter(MesExtConstWords.IS_VALID1, CommonEnumUtil.IS_VAILD.VAILD.getValue());
query.setParameter(MesExtConstWords.IS_DELETED, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
if (!StringUtils.isEmpty(mesModuleExcel.getModuleCode())) {
query.setParameter(MesExtConstWords.MODULE_CODE, "%" + mesModuleExcel.getModuleCode() + "%");
if (!StringUtils.isEmpty(mesModuleExcel.getQueryIsAllowLike()) && mesModuleExcel.getQueryIsAllowLike().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) {
query.setParameter(MesExtConstWords.MODULE_CODE, "%" + mesModuleExcel.getModuleCode() + "%");
} else {
query.setParameter(MesExtConstWords.MODULE_CODE, mesModuleExcel.getModuleCode());
}
}
if (!StringUtils.isEmpty(mesModuleExcel.getModuleName())) {
query.setParameter(MesExtConstWords.MODULE_NAME, "%" + mesModuleExcel.getModuleName() + "%");

@ -50,6 +50,10 @@ public class MesSAPDbAdapter {
@Resource(name = "piscesDataSource")
private DynamicDataSourceProxy piscesDataSourceProxy;
@Resource(name = "pisces1DataSource")
private DynamicDataSourceProxy pisces1DataSourceProxy;
@Value("${sync.redis.time:1800}")
private Integer redisTime;
@ -77,7 +81,8 @@ public class MesSAPDbAdapter {
private WmsSAPDbWriter buildWriter(String groupName,
DynamicDataSourceProxy sapDataSourceProxy,
DynamicDataSourceProxy mesDataSourceProxy,
DynamicDataSourceProxy piscesDataSourceProxy) throws Exception {
DynamicDataSourceProxy piscesDataSourceProxy,
DynamicDataSourceProxy pisces1DataSourceProxy) throws Exception {
WmsSAPDbWriter wmsSAPDbWriter = null;
@ -97,7 +102,13 @@ public class MesSAPDbAdapter {
wmsSAPDbWriter = new WmsSAPDbWriter(mesDataSourceProxy, piscesDataSourceProxy);
}
if (groupName.equals(MesInterfaceEnumUtil.DIRECTION_TYPE.PISCES12MES.getName())) {
wmsSAPDbWriter = new WmsSAPDbWriter(pisces1DataSourceProxy, mesDataSourceProxy);
}
if (groupName.equals(MesInterfaceEnumUtil.DIRECTION_TYPE.MES2PISCES1.getName())) {
wmsSAPDbWriter = new WmsSAPDbWriter(mesDataSourceProxy, pisces1DataSourceProxy);
}
// new 的对象需要手工注入 bean
@ -128,7 +139,8 @@ public class MesSAPDbAdapter {
private WmsSAPDbReader buildReader(String groupName,
DynamicDataSourceProxy sapDataSourceProxy,
DynamicDataSourceProxy mesDataSourceProxy,
DynamicDataSourceProxy piscesDataSourceProxy) {
DynamicDataSourceProxy piscesDataSourceProxy,
DynamicDataSourceProxy pisces1DataSourceProxy) {
WmsSAPDbReader wmsSAPDbReader = null;
@ -148,6 +160,14 @@ public class MesSAPDbAdapter {
wmsSAPDbReader = new WmsSAPDbReader(mesDataSourceProxy);
}
if (groupName.equals(MesInterfaceEnumUtil.DIRECTION_TYPE.PISCES12MES.getName())) {
wmsSAPDbReader = new WmsSAPDbReader(pisces1DataSourceProxy);
}
if (groupName.equals(MesInterfaceEnumUtil.DIRECTION_TYPE.MES2PISCES1.getName())) {
wmsSAPDbReader = new WmsSAPDbReader(mesDataSourceProxy);
}
// if (groupName.equals(MesInterfaceEnumUtil.DIRECTION_TYPE.WMS2MES.getName())) {
// wmsSAPDbReader = new WmsSAPDbReader(mesDataSourceProxy);
// }
@ -200,11 +220,11 @@ public class MesSAPDbAdapter {
// 不需要在这里处理
//initConnection();
writer = buildWriter(groupName, sapDataSourceProxy, mesDataSourceProxy,piscesDataSourceProxy);
writer = buildWriter(groupName, sapDataSourceProxy, mesDataSourceProxy,piscesDataSourceProxy,pisces1DataSourceProxy);
writer.setSrcConn(this.srcConn);
writer.setDestConn(this.destConn);
reader = buildReader(groupName, sapDataSourceProxy, mesDataSourceProxy,piscesDataSourceProxy);
reader = buildReader(groupName, sapDataSourceProxy, mesDataSourceProxy,piscesDataSourceProxy,pisces1DataSourceProxy);
reader.setSrcConn(this.srcConn);
@ -361,11 +381,11 @@ public class MesSAPDbAdapter {
// 不需要在这里处理
//initConnection();
writer = buildWriter(groupName, sapDataSourceProxy, mesDataSourceProxy,piscesDataSourceProxy);
writer = buildWriter(groupName, sapDataSourceProxy, mesDataSourceProxy,piscesDataSourceProxy,pisces1DataSourceProxy);
writer.setSrcConn(this.srcConn);
writer.setDestConn(this.destConn);
reader = buildReader(groupName, sapDataSourceProxy, mesDataSourceProxy,piscesDataSourceProxy);
reader = buildReader(groupName, sapDataSourceProxy, mesDataSourceProxy,piscesDataSourceProxy,pisces1DataSourceProxy);
reader.setSrcConn(this.srcConn);

@ -85,7 +85,7 @@ public class MesEquipmentVariableService extends BaseMesService<MesEquipmentVari
mesEquipmentVariable.setEquipmentCode(mesEquipment.getEquipmentCode());
mesEquipmentVariable.setTagName(String.valueOf(objects.get(0)));
mesEquipmentVariable.setTagAddress(String.valueOf(objects.get(1)));
mesEquipmentVariable.setVariableDataType(MesExtEnumUtil.VARIABLE_DATA_TYPE.descriptionOfValue(String.valueOf(objects.get(2))));
mesEquipmentVariable.setDataType(MesExtEnumUtil.VARIABLE_DATA_TYPE.descriptionOfValue(String.valueOf(objects.get(2))));
mesEquipmentVariable.setVariableType(Integer.parseInt(objects.get(3) + ""));
mesEquipmentVariable.setReadWriteFlag(MesExtEnumUtil.READ_WRITE_FLAG.descriptionOfValue(String.valueOf(objects.get(4))));
mesEquipmentVariable.setOrganizeCode(organizeCode);

@ -88,4 +88,11 @@ public class MesPartShippingGroupService extends BaseMesService<MesPartShippingG
}
}
}
@Override
public MesPartShippingGroup getMesPartShippingGroup(String organizeCode, String shippingGroupCode) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(shippingGroupCode, "shippingGroupCode", packBean);
return baseRDao.getByProperty(packBean);
}
}

@ -9,7 +9,9 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
/**
* @Description :
@ -30,6 +32,6 @@ public class MesProduceSnServiceImpl extends BaseMesService<MesProduceSn> implem
if (CollectionUtils.isEmpty(produceSnList)) {
MesException.throwMesBusiException("条码【%s】信息不存在", sn);
}
return produceSnList;
return produceSnList.stream().filter(o -> null != o).sorted(Comparator.comparing(MesProduceSn::getCreateDatetime).reversed()).collect(Collectors.toList());
}
}

@ -2,6 +2,7 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base;
import cn.estsh.i3plus.ext.mes.api.base.IMesConfigService;
import cn.estsh.i3plus.ext.mes.api.base.IMesPartSapService;
import cn.estsh.i3plus.ext.mes.api.base.IMesPartShippingGroupService;
import cn.estsh.i3plus.ext.mes.api.base.IMesShippingOrderManagementService;
import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
@ -28,6 +29,7 @@ import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.stream.Collectors;
@Service
@ -60,6 +62,8 @@ public class MesShippingOrderManagementService extends BaseMesService<MesShippin
@Autowired
private IMesPartSapService partService;
@Autowired
private IMesPartShippingGroupService mesPartShippingGroupService;
protected void setPackQueryBean(MesShippingOrderManagement bean, DdlPackBean packBean) {
DdlPreparedPack.getStringEqualPack(bean.getShippingCode(), "shippingCode", packBean);
@ -291,6 +295,7 @@ public class MesShippingOrderManagementService extends BaseMesService<MesShippin
Map<String, List<MesShippingOrderManagementDetail>> detailMap = detailDeleteList.stream().collect(Collectors.groupingBy(k -> k.getPartNo()));
List<MesJisShipping> jisShippingList = new ArrayList<>();
MesPartShippingGroup mesPartShippingGroup = mesPartShippingGroupService.getMesPartShippingGroup(bean.getOrganizeCode(), originBean.getShippingGroupCode());
detailMap.forEach((k, v) -> {
MesPartSap part = partService.getMesPartSapByPartNo(v.get(0).getPartNo(), bean.getOrganizeCode());
@ -303,7 +308,7 @@ public class MesShippingOrderManagementService extends BaseMesService<MesShippin
jisShipping.setShippingTime(TimeTool.getNowTime(true));
jisShipping.setDock(originBean.getSendDockCode());
jisShipping.setErpWarerhouse(configService.getCfgValue(bean.getOrganizeCode(), "ERP_WARERHOUSE"));
jisShipping.setErpWarehous(configService.getCfgValue(bean.getOrganizeCode(), "ERP_WAREHOUS"));
jisShipping.setErpWarehous(mesPartShippingGroup == null || StringUtils.isEmpty(mesPartShippingGroup.getSrcWarerhouse()) ? configService.getCfgValue(bean.getOrganizeCode(), "ERP_WAREHOUS") : mesPartShippingGroup.getSrcWarerhouse());
jisShipping.setCusDock(originBean.getCustDockCode());
jisShipping.setCustOrderNo(v.get(0).getCustOrderNo());
jisShipping.setSerialNumber(v.get(0).getBarcode());
@ -315,6 +320,8 @@ public class MesShippingOrderManagementService extends BaseMesService<MesShippin
jisShipping.setUnit(part.getUnit());
}
jisShipping.setOffTime(TimeTool.getNowTime(true));
jisShipping.setFid(UUID.randomUUID().toString());
jisShipping.setSystemSyncStatus(CommonEnumUtil.FALSE);
ConvertBean.serviceModelInitialize(jisShipping, AuthUtil.getSessionUser().getUserName());
jisShippingList.add(jisShipping);
});

@ -1,16 +1,24 @@
package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base;
import cn.estsh.i3plus.ext.mes.api.base.IMesWorkCenterService;
import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords;
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.MesWorkCenter;
import cn.estsh.i3plus.pojo.mes.repository.MesWorkCenterRepository;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
@Service
@Slf4j
public class MesWorkCenterService extends BaseMesService<MesWorkCenter> implements IMesWorkCenterService {
@Autowired
private MesWorkCenterRepository workCenterRepository;
@Override
protected void setPackQueryBean(MesWorkCenter bean, DdlPackBean packBean) {
DdlPreparedPack.getStringLikerPack(bean.getErpWorkCenter(), "erpWorkCenter", packBean);
@ -19,4 +27,18 @@ public class MesWorkCenterService extends BaseMesService<MesWorkCenter> implemen
DdlPreparedPack.getNumEqualPack(bean.getCenterType(), "centerType", packBean);
}
@Override
public MesWorkCenter getWorkCenterDb(String organizeCode, String workCenterCode) {
if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(workCenterCode)) return null;
return workCenterRepository.getByProperty(
new String[]{MesExtConstWords.ORGANIZE_CODE, MesExtConstWords.IS_DELETED, MesExtConstWords.IS_VALID, MesExtConstWords.WORK_CENTER_CODE},
new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), workCenterCode});
}
@Override
public String getErpWorkCenterCode(String organizeCode, String workCenterCode) {
MesWorkCenter workCenterDb = getWorkCenterDb(organizeCode, workCenterCode);
return null != workCenterDb ? workCenterDb.getErpWorkCenter() : null;
}
}

@ -2,8 +2,8 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base;
import cn.estsh.i3plus.ext.mes.api.base.*;
import cn.estsh.i3plus.ext.mes.apiservice.dao.IMesWorkOrderDao;
import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException;
import cn.estsh.i3plus.ext.mes.apiservice.utils.BeanMapUtilsExt;
import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException;
import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.mes.api.iservice.busi.ISyncFuncService;
import cn.estsh.i3plus.mes.apiservice.util.DateUtil;
@ -108,6 +108,9 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
private MesPartRepository mesPartRDao;
@Autowired
private IMesWorkCenterService workCenterService;
@Autowired
private MesWorkCenterPartRelationRepository partRelationRao;
@Override
public MesWorkOrder insert(MesWorkOrder bean) {
@ -990,7 +993,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
}
//成品移库
if (isMove) {
MesMove move = createMove(mesPartSap, mesProdRuleSortCfg.getSrcErpLocation(), mesProdRuleSortCfg.getDestErpLocation(), mesWorkOrder.getOrganizeCode(), mesWorkOrderNew.getNum(), sn, MesExtEnumUtil.MOVE_TYPE.FINISH_PRODUCTS_MOVE.getValue());
MesMove move = createMove(mesPartSap, mesProdRuleSortCfg.getSrcErpLocation(), mesProdRuleSortCfg.getDestErpLocation(), mesWorkOrder.getOrganizeCode(), mesWorkOrder.getWorkCenterCode(), mesWorkOrderNew.getNum(), sn, MesExtEnumUtil.MOVE_TYPE.FINISH_PRODUCTS_MOVE.getValue());
move.setMatnr(mesWorkOrder.getPartNo());
mesMoveList.add(move);
}
@ -1136,7 +1139,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
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());
MesMove move = createMove(mesPartSap, moveRule.getErpSrcLocateNo(), moveRule.getErpDestLocateNo(), mesBom.getOrganizeCode(), mesWorkOrder.getWorkCenterCode(), mesBom.getItemQty(), "", MesExtEnumUtil.MOVE_TYPE.RAW_MATERIAL_MOVE.getValue());
move.setMatnr(mesBom.getItemPartNo());
mesMoveList.add(move);
}
@ -1237,7 +1240,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
return mesWorkOrderRDao.findByHqlWhere(packBean);
}
private MesMove createMove(MesPartSap mesPart, String source, String target, String org, double qty, String sn, Integer moveType) {
private MesMove createMove(MesPartSap mesPart, String source, String target, String org, String workCenterCode, double qty, String sn, Integer moveType) {
MesMove move = new MesMove();
if (!Objects.isNull(mesPart)) {
move.setMeins(mesPart.getUnit());
@ -1251,6 +1254,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
move.setProductSn(sn);
move.setMoveType(moveType);
move.setPostTime(TimeTool.getTimeShortWithColon());
move.setWorkCenter(workCenterService.getErpWorkCenterCode(org, workCenterCode));
ConvertBean.serviceModelInitialize(move, AuthUtil.getSessionUser().getUserName());
return move;
}

@ -0,0 +1,136 @@
package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.file;
import cn.estsh.i3plus.ext.mes.api.base.file.IMesFileService;
import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.platform.bean.SysFile;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.impp.framework.boot.fileservice.ImppFileService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
/**
* @Description :
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/7/19 11:55
* @Modify:
**/
@Slf4j
@Service
public class MesFileServiceImpl implements IMesFileService {
@Autowired
private ImppFileService imppFileService;
@Override
public SysFile uploadFile(MultipartFile file) {
SysFile sysFile;
try {
log.info("文件大小{}", file.getBytes().length);
sysFile = save2FastDfs(file);
log.info("after save2FastDfs {}", sysFile);
} catch (IOException e) {
log.error("FastDFS上传文件出错{}", e.getMessage() + "\r" + e.getStackTrace());
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
.setErrorCode(ImppExceptionEnum.IO_EXCEPTION_FILE.getCode())
.setErrorDetail("上传文件至文件服务器出错了。信息为:%s", e.getMessage())
.build();
}
if (null == sysFile) {
log.error("FastDFS上传文件出错");
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
.setErrorCode(ImppExceptionEnum.IO_EXCEPTION_FILE.getCode())
.setErrorDetail("FastDFS上传文件出错")
.build();
}
if (StringUtils.isEmpty(sysFile.getFileTypeId())) {
log.error("FastDFS上传文件出错{}", "未在字典中定义该文件类型无法上传成功请先添加file_type字典");
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
.setErrorCode(ImppExceptionEnum.IO_EXCEPTION_FILE.getCode())
.setErrorDetail("未在字典中定义该文件类型无法上传成功请先添加file_type字典")
.build();
}
return sysFile;
}
/**
* FastDfs
*
* @param multipartFile
* @return URL
* @throws IOException
*/
private SysFile save2FastDfs(MultipartFile multipartFile) throws IOException {
SysFile sysFile = imppFileService.upload(multipartFile, CommonEnumUtil.SOFT_TYPE.MES.getValue());
return sysFile;
}
@Override
public void getFileByUrl(HttpServletResponse resp, String fileUrl) {
InputStream inputStream = getInputStream(fileUrl);
writeFile(resp, inputStream);
}
private static InputStream getInputStream(String urlPath) {
InputStream inputStream = null;
HttpURLConnection httpURLConnection;
try {
URL url = new URL(urlPath);
httpURLConnection = (HttpURLConnection) url.openConnection();
httpURLConnection.setConnectTimeout(3000);
httpURLConnection.setDoInput(true);
httpURLConnection.setRequestMethod("GET");
int responseCode = httpURLConnection.getResponseCode();
System.out.println("responseCode is:" + responseCode);
if (responseCode == HttpURLConnection.HTTP_OK) {
inputStream = httpURLConnection.getInputStream();
} else {
inputStream = httpURLConnection.getErrorStream();
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return inputStream;
}
private static void writeFile(HttpServletResponse resp, InputStream inputStream) {
OutputStream out = null;
try {
out = resp.getOutputStream();
int len;
byte[] b = new byte[1024];
while ((len = inputStream.read(b)) != -1) {
out.write(b, 0, len);
}
out.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (out != null) {
out.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}

@ -1,11 +1,10 @@
package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.file;
import cn.estsh.i3plus.ext.mes.api.base.file.IMesFileService;
import cn.estsh.i3plus.ext.mes.api.base.file.IMesModuleExcelService;
import cn.estsh.i3plus.ext.mes.apiservice.dao.IMesModuleExcelDao;
import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.BaseMesService;
import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException;
import cn.estsh.i3plus.ext.mes.apiservice.utils.HuaWeiOBSUtil;
import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.ext.mes.pojo.sqlpack.MesExtHqlPack;
import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
@ -18,14 +17,13 @@ import cn.estsh.i3plus.pojo.mes.bean.MesFile;
import cn.estsh.i3plus.pojo.mes.bean.MesModuleExcel;
import cn.estsh.i3plus.pojo.mes.model.MesModuleExcelModel;
import cn.estsh.i3plus.pojo.mes.repository.MesFileRepository;
import com.obs.services.model.PutObjectResult;
import cn.estsh.i3plus.pojo.platform.bean.SysFile;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.List;
/**
@ -45,6 +43,9 @@ public class MesModuleExcelServiceImpl extends BaseMesService<MesModuleExcel> im
@Autowired
private MesFileRepository mesFileRDao;
@Autowired
private IMesFileService mesFileService;
@Override
public ListPager<MesModuleExcelModel> queryModuleExcelByPager(MesModuleExcel mesModuleExcel, Pager pager) {
pager = PagerHelper.getPager(pager, mesModuleExcelDao.queryModuleExcelCount(mesModuleExcel));
@ -93,21 +94,20 @@ public class MesModuleExcelServiceImpl extends BaseMesService<MesModuleExcel> im
}
private MesFile getMesFile(MultipartFile file, MesModuleExcel mesModuleExcel) {
String fileName = file.getOriginalFilename();
PutObjectResult putObjectResult = null;
try {
putObjectResult = HuaWeiOBSUtil.putObjectByMultipartFile(MesCommonConstant.OBS_BUCKET_NAME, fileName, file);
} catch (IOException e) {
MesException.throwMesBusiException("文件上传失败");
SysFile sysFile = mesFileService.uploadFile(file);
if (sysFile.getFileTypeId() == null) {
MesException.throwMesBusiException("未在字典中定义该文件类型无法上传成功请先添加file_type字典");
}
MesFile mesFile = new MesFile();
mesFile.setOrganizeCode(mesModuleExcel.getOrganizeCode());
mesFile.setFileName(fileName);
mesFile.setFileUrl(putObjectResult.getObjectUrl());
mesFile.setFileSize(String.valueOf(file.getSize()));
mesFile.setGroupName(putObjectResult.getBucketName());
mesFile.setFileType(fileName != null && fileName.contains(".") ? fileName.substring(fileName.indexOf(".") + 1) : "");
mesFile.setFileOriginName(fileName);
mesFile.setFileName(sysFile.getDfsFileName());
mesFile.setFileUrl(sysFile.getFilePath());
mesFile.setFileSize(String.valueOf(sysFile.getFileSize()));
mesFile.setFileType(String.valueOf(sysFile.getFileTypeName()));
mesFile.setFileOriginName(sysFile.getFileOriginalName());
mesFile.setGroupName(sysFile.getDfsGroupName());
mesFile.setSyncTag(0);
ConvertBean.serviceModelInitialize(mesFile, mesModuleExcel.getCreateUser());
return mesFile;
}

@ -0,0 +1,145 @@
package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.busi;
import cn.estsh.i3plus.ext.mes.api.base.IMesConfigService;
import cn.estsh.i3plus.ext.mes.api.base.IMesPartSapService;
import cn.estsh.i3plus.ext.mes.api.base.IMesWorkCenterService;
import cn.estsh.i3plus.ext.mes.api.busi.IMesInputDefectRecordService;
import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.mes.api.iservice.busi.ISyncFuncService;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.platform.common.tool.TimeTool;
import cn.estsh.i3plus.pojo.mes.bean.MesDefectType;
import cn.estsh.i3plus.pojo.mes.bean.MesMove;
import cn.estsh.i3plus.pojo.mes.bean.MesPartSap;
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
import cn.estsh.i3plus.pojo.mes.bean.nc.MesPartInspection;
import cn.estsh.i3plus.pojo.mes.bean.nc.MesPartInspectionDetail;
import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel;
import cn.estsh.i3plus.pojo.mes.repository.MesMoveRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesPartInspectionDetailRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesPartInspectionRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesProduceSnRepository;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import cn.estsh.impp.framework.boot.auth.AuthUtil;
import cn.estsh.impp.framework.boot.util.ResultBean;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.Objects;
/**
* @Description :
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/7/19 15:52
* @Modify:
**/
@Service
@Slf4j
public class MesInputDefectRecordServiceImpl implements IMesInputDefectRecordService {
@Autowired
private MesMoveRepository moveRepository;
@Autowired
private MesPartInspectionRepository partInspectionRepository;
@Autowired
private MesPartInspectionDetailRepository partInspectionDetailRepository;
@Autowired
private IMesConfigService configService;
@Autowired
private ISyncFuncService syncFuncService;
@Autowired
private MesProduceSnRepository mesProduceSnRepository;
@Autowired
private IMesPartSapService mesPartSapService;
@Autowired
private IMesWorkCenterService workCenterService;
@Override
public void savePartInspection(MesProduceSn mesProduceSn, String userName, MesDefectType mesDefect,String defectLocation) {
MesPartSap mesPartSap = mesPartSapService.getMesPartSapByPartNo(mesProduceSn.getPartNo(), mesProduceSn.getOrganizeCode());
MesPartInspection mesPartInspection = partInspectionRepository.insert(createPartInspection(mesPartSap, mesProduceSn.getProductSn(), mesProduceSn.getOrganizeCode(), userName));
saveDetail(mesProduceSn.getOrganizeCode(), mesDefect, mesPartInspection.getId(), userName,defectLocation);
//更新条码状态
mesProduceSn.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.SUSPICIOUS.getValue());
ConvertBean.serviceModelInitialize(mesProduceSn, userName);
mesProduceSnRepository.update(mesProduceSn);
//移库
createMove(mesPartSap, mesPartInspection.getId(), configService.getCfgValue(mesProduceSn.getOrganizeCode(), "LGORT"), configService.getCfgValue(mesProduceSn.getOrganizeCode(), "UMLGO"), mesProduceSn);
}
private void saveDetail(String organizeCode, MesDefectType mesDefect, long partInspectionId, String userName,String defectLocation) {
MesPartInspectionDetail detail = new MesPartInspectionDetail();
if (!Objects.isNull(mesDefect)) {
detail.setDefectTypeId(mesDefect.getId());
BeanUtils.copyProperties(mesDefect, detail);
}
detail.setId(null);
detail.setDefectLocation(defectLocation);
detail.setFrontBack(MesExtEnumUtil.DEFECT_ALARM_CONFIG_SIDES.FRONT.getValue());
detail.setOrganizeCode(organizeCode);
detail.setPid(partInspectionId);
ConvertBean.serviceModelInitialize(detail, userName);
partInspectionDetailRepository.insert(detail);
}
private MesPartInspection createPartInspection(MesPartSap mesPartSap, String sn, String org, String userName) {
MesPartInspection partInspection = new MesPartInspection();
partInspection.setOrganizeCode(org);
partInspection.setPartNo(mesPartSap.getPartNo());
partInspection.setPartName(mesPartSap.getPartName());
partInspection.setInspectionDate(TimeTool.getToday());
partInspection.setInspectionStatus(MesExtEnumUtil.PART_INSPECTION_STATUS.FAIL.getValue());
partInspection.setNcStatus(MesExtEnumUtil.PART_INSPECTION_NC_STATUS.CREATE.getValue());
partInspection.setSn(sn);
partInspection.setQty(MesCommonConstant.TRUE_INTEGER);
partInspection.setSourceType(MesExtEnumUtil.PART_INSPECTION_SOURCE_TYPE.SINGLE.getValue());
ConvertBean.serviceModelInitialize(partInspection, userName);
return partInspection;
}
/**
*
*
* @param source
* @param target
* @return
*/
private void createMove(MesPartSap mesPartSap, long partInspectionId, String source, String target, MesProduceSn mesProduceSn) {
GenSerialNoModel serialNoModel = new GenSerialNoModel("INPUT_DEFECT_ZRSUM");
serialNoModel.setPartNo(mesPartSap.getPartNo());
ResultBean rb = syncFuncService.syncSerialNo(serialNoModel, AuthUtil.getSessionUser().getUserName(), mesProduceSn.getOrganizeCode(), 1);
String zrsum = "";
if (null != rb && !CollectionUtils.isEmpty(rb.getResultList())) {
zrsum = (rb.getResultList().get(0)).toString();
}
MesMove move = new MesMove();
move.setMatnr(mesPartSap.getPartNo());
move.setOrganizeCode(mesProduceSn.getOrganizeCode());
move.setFactoryCode(mesProduceSn.getOrganizeCode());
move.setLgort(source);
move.setUmlgo(target);
move.setMenge(1d);
move.setMeins(mesPartSap.getUnit());
move.setZrsum(zrsum);
move.setPostDate(TimeTool.getToday());
move.setPostTime(TimeTool.getTimeShortWithColon());
move.setPartInspectionId(partInspectionId);
move.setMoveType(MesExtEnumUtil.MOVE_TYPE.SUSPICIOUS_MOVE.getValue());
move.setProductSn(mesProduceSn.getProductSn());
move.setWorkCenter(workCenterService.getErpWorkCenterCode(mesProduceSn.getOrganizeCode(), mesProduceSn.getWorkCenterCode()));
ConvertBean.serviceModelInitialize(move, AuthUtil.getSessionUser().getUserName());
moveRepository.insert(move);
}
}

@ -2,6 +2,7 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.busi;
import cn.estsh.i3plus.ext.mes.api.busi.IProdExtOrgService;
import cn.estsh.i3plus.ext.mes.apiservice.dao.IEquipmentExtDao;
import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords;
import cn.estsh.i3plus.mes.api.iservice.base.IEnumService;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum;
@ -21,6 +22,7 @@ import cn.estsh.i3plus.pojo.mes.model.ProdOrgModel;
import cn.estsh.i3plus.pojo.mes.model.SysOrganizeModel;
import cn.estsh.i3plus.pojo.mes.repository.*;
import cn.estsh.i3plus.pojo.mes.sqlpack.MesHqlPack;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import cn.estsh.i3plus.pojo.platform.bean.SysUserInfo;
import cn.estsh.impp.framework.boot.auth.AuthUtil;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
@ -62,6 +64,10 @@ public class ProdExtOrgService implements IProdExtOrgService {
private MesWorkCellParamRepository workCellParamRepository;
@Autowired
private IEnumService enumService;
@Autowired
private MesWorkModuleRepository workModuleRepository;
@Autowired
private MesWorkCellModuleRepository workCellModuleRepository;
@Override
public List queryMesDataTree(String organizeCode) {
@ -172,7 +178,6 @@ public class ProdExtOrgService implements IProdExtOrgService {
if (MesEnumUtil.PROD_ORG_LEVEL.LEVEL_THREE.getValue() == prodOrgModel.getLevel()) {
MesWorkCell workCell = new MesWorkCell();
BeanUtils.copyProperties(prodOrgModel, workCell);
//checkWorkCell(workCell);
//唯一性校验
MesWorkCell mesWorkCell = workCellRepository.getByProperty(new String[]{MesConstWords.ORGANIZE_CODE, MesConstWords.IS_DELETED, "workCellCode", "workCenterCode"},
new Object[]{workCell.getOrganizeCode(), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), workCell.getWorkCellCode(), workCell.getWorkCenterCode()});
@ -186,12 +191,12 @@ public class ProdExtOrgService implements IProdExtOrgService {
.build();
}
workCell.setGrade(prodOrgModel.getGrade());
insertWorkCellModule(workCell);
return workCellRepository.insert(workCell);
}
return null;
}
@Override
public ListPager<MesArea> queryMesAreaByPager(MesArea mesArea, Pager pager) {
@ -395,23 +400,12 @@ public class ProdExtOrgService implements IProdExtOrgService {
workCell.getAreaCode(), workCell.getWorkCenterCode(), workCell.getWorkCellCode())
.build();
}
/*if (MesEnumUtil.MES_WORK_CELL_TYPE.REWORK.getValue() == workCell.getWorkCellType()) {
MesWorkCell mesWorkCell = workCellRepository.getByProperty(new String[]{MesConstWords.ORGANIZE_CODE, MesConstWords.IS_DELETED, MesConstWords.IS_VALID, "workCenterCode", "workCellType"},
new Object[]{workCell.getOrganizeCode(), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), workCell.getWorkCenterCode(), workCell.getWorkCellType()});
if (mesWorkCell != null && !mesWorkCell.getId().equals(workCellDb.getId())) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_EXIT.getCode())
.setErrorDetail("工位代码为【%s】工位类型为【%s】的记录已存在", mesWorkCell.getWorkCellCode(), MesEnumUtil.MES_WORK_CELL_TYPE.valueOfDescription(workCell.getWorkCellType()))
.build();
}
}*/
workCellDb.setSeq(workCell.getSeq());
workCellDb.setWorkCellName(workCell.getWorkCellName());
workCellDb.setGrade(workCell.getGrade());
ConvertBean.serviceModelUpdate(workCellDb, AuthUtil.getSessionUser().getUserName());
return workCellRepository.save(workCellDb);
ConvertBean.serviceModelUpdate(workCell, AuthUtil.getSessionUser().getUserName());
insertWorkCellModule(workCell);
return workCellRepository.save(workCell);
}
@Override
@ -598,4 +592,31 @@ public class ProdExtOrgService implements IProdExtOrgService {
new Object[]{status, userName, TimeTool.getNowTime(true)});
}
private void insertWorkCellModule(MesWorkCell workCell) {
if (StringUtils.isEmpty(workCell.getGrade()) || workCell.getGrade().compareTo(MesExtEnumUtil.WORK_CELL_GRADE.SCAN.getValue()) != 0) return;
List<MesWorkCellModule> workCellModuleList = getWorkCellModuleButtonList(workCell.getOrganizeCode(), workCell.getWorkCenterCode(), workCell.getWorkCellCode());
if (!CollectionUtils.isEmpty(workCellModuleList)) return;
List<MesWorkModule> workModuleList = getWorkModuleButtonList(workCell.getOrganizeCode());
if (CollectionUtils.isEmpty(workModuleList)) return;
for (MesWorkModule workModule : workModuleList) {
if (null == workModule) continue;
MesWorkCellModule workCellModule = new MesWorkCellModule();
BeanUtils.copyProperties(workCell, workCellModule, MesExtConstWords.ID);
workCellModule.setModuleCode(workModule.getModuleCode());
workCellModuleRepository.insert(workCellModule);
}
}
private List<MesWorkCellModule> getWorkCellModuleButtonList(String organizeCode, String workCenterCode, String workCellCode) {
return workCellModuleRepository.findByProperty(
new String[]{MesExtConstWords.ORGANIZE_CODE, MesExtConstWords.IS_DELETED, MesExtConstWords.WORK_CENTER_CODE, MesExtConstWords.WORK_CELL_CODE},
new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), workCenterCode, workCellCode});
}
private List<MesWorkModule> getWorkModuleButtonList(String organizeCode) {
return workModuleRepository.findByProperty(
new String[]{MesExtConstWords.ORGANIZE_CODE, MesExtConstWords.IS_DELETED, MesExtConstWords.IS_VALID, MesExtConstWords.MODULE_TYPE},
new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), MesEnumUtil.WORK_MODULE_TYPE.BUTTON_MODULE.getValue()});
}
}

@ -2,6 +2,7 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.report;
import cn.estsh.i3plus.ext.mes.api.base.IMesProduceSnService;
import cn.estsh.i3plus.ext.mes.api.base.IMesProductionRecordService;
import cn.estsh.i3plus.ext.mes.api.base.file.IMesFileService;
import cn.estsh.i3plus.ext.mes.api.busi.report.IMesYfReportService;
import cn.estsh.i3plus.ext.mes.apiservice.dao.report.IMesYfReportDao;
import cn.estsh.i3plus.ext.mes.apiservice.utils.BeanMapUtilsExt;
@ -10,6 +11,7 @@ import cn.estsh.i3plus.ext.mes.apiservice.utils.MesTraceabilityTemp;
import cn.estsh.i3plus.ext.mes.pojo.model.report.MesDeviceDataQueryReportConditionModel;
import cn.estsh.i3plus.ext.mes.pojo.model.report.MesDeviceDataQueryReportResultModel;
import cn.estsh.i3plus.ext.mes.pojo.model.report.MesProdRuleReportConditionModel;
import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords;
import cn.estsh.i3plus.mes.apiservice.util.DateUtil;
import cn.estsh.i3plus.platform.common.tool.TimeTool;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
@ -74,11 +76,17 @@ public class MesYfReportServiceImpl implements IMesYfReportService {
private MesProductionAssemblyRepository mesProductionAssemblyRepository;
@Autowired
private MesWorkCellScanMonitorLogRepository mesWorkCellScanMonitorLogRepository;
private MesWorkCellScanMonitorLogRepository workCellScanMonitorLogRepository;
@Autowired
private MesProcessRepository mesProcessRepository;
@Autowired
private MesWorkCenterRepository workCenterRepository;
@Autowired
private IMesFileService mesFileService;
@Override
public ListPager<MesDeviceDataQueryReportResultModel> queryMesDeviceDataByPager(MesDeviceDataQueryReportConditionModel queryReportModel, Pager pager) {
ListPager<MesDeviceDataQueryReportResultModel> mesDeviceDataQueryReportResultModelListPager =
@ -138,7 +146,7 @@ public class MesYfReportServiceImpl implements IMesYfReportService {
public List<MesTraceabilityReportModel> findTraceabilityReport(MesProduceSn mesProduceSn) {
DdlPackBean packBean = getDdlPackBean(mesProduceSn);
//查询条码记录表
MesProduceSn produceSn = mesProduceSnService.findMesProduceSn(mesProduceSn.getOrganizeCode(), mesProduceSn.getProductSn()).iterator().next();
MesProduceSn produceSn = mesProduceSnService.findMesProduceSn(mesProduceSn.getOrganizeCode(), mesProduceSn.getProductSn()).get(0);
//设备加工记录表
List<MesProductionRecord> productionRecordList = mesProductionRecordService.findMesProductionRecord(mesProduceSn.getOrganizeCode(), mesProduceSn.getProductSn());
List<String> processCodeList = productionRecordList.stream().map(MesProductionRecord::getProcessCode).filter(StringUtil::isNotEmpty).collect(Collectors.toList());
@ -146,7 +154,7 @@ public class MesYfReportServiceImpl implements IMesYfReportService {
List<MesProductionAssembly> productionAssemblyList = mesProductionAssemblyRepository.findByHqlWhere(packBean);
Map<String, List<MesProductionAssembly>> productionAssemblyMap = CollectionUtils.isEmpty(productionAssemblyList) ? null : productionAssemblyList.stream().collect(Collectors.groupingBy(t -> t.getWorkCenterCode() + t.getWorkCellCode() + t.getEquipmentCode()));
//工位扫描监控日志
List<MesWorkCellScanMonitorLog> mesWorkCellScanMonitorLogs = mesWorkCellScanMonitorLogRepository.findByHqlWhere(packBean);
List<MesWorkCellScanMonitorLog> mesWorkCellScanMonitorLogs = getWorkCellScanMonitorLogList(productionRecordList);
Map<String, List<MesWorkCellScanMonitorLog>> mesWorkCellScanMonitorMap = CollectionUtils.isEmpty(mesWorkCellScanMonitorLogs) ? null : mesWorkCellScanMonitorLogs.stream().collect(Collectors.groupingBy(t -> t.getWorkCenterCode() + t.getWorkCellCode() + t.getEquipmentCode()));
//查询工序名称
Map<String, MesProcess> processMap = getMesProcessMap(mesProduceSn, processCodeList);
@ -154,7 +162,7 @@ public class MesYfReportServiceImpl implements IMesYfReportService {
List<MesTraceabilityReportModel> mesTraceabilityReportModelList = new ArrayList<>();
MesTraceabilityReportModel mesTraceabilityReportModel = new MesTraceabilityReportModel();
BeanUtils.copyProperties(produceSn, mesTraceabilityReportModel);
mesTraceabilityReportModel.setProdType(MesExtEnumUtil.TRACEABILITY_REPORT_PROD_TYPE.NO_SORT.getValue());
mesTraceabilityReportModel.setProdType(getWorkCenter(produceSn).getCenterType());
int duration = 0;
for (MesProductionRecord mesProductionRecord : productionRecordList) {
MesTraceabilityReportDataModel dataModel = new MesTraceabilityReportDataModel();
@ -199,7 +207,7 @@ public class MesYfReportServiceImpl implements IMesYfReportService {
//生成PDF文件并上传
try {
mesTraceabilityReportModel.setUrl(MesTraceabilityTemp.getMesTraceabilityTemp(mesTraceabilityReportModel));
mesTraceabilityReportModel.setUrl(MesTraceabilityTemp.getMesTraceabilityTemp(mesFileService,mesTraceabilityReportModel));
} catch (IOException e) {
MesException.throwMesBusiException("删除文件生成PDF文件失败");
}
@ -209,6 +217,30 @@ public class MesYfReportServiceImpl implements IMesYfReportService {
return mesTraceabilityReportModelList;
}
private MesWorkCenter getWorkCenter(MesProduceSn produceSn) {
MesWorkCenter workCenter = workCenterRepository.getByProperty(
new String[]{MesExtConstWords.ORGANIZE_CODE, MesExtConstWords.IS_DELETED, MesExtConstWords.IS_VALID, MesExtConstWords.WORK_CENTER_CODE},
new Object[]{produceSn.getOrganizeCode(), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), produceSn.getWorkCenterCode()});
if (null == workCenter) MesException.throwMesBusiException("条码[%s]关联的生产线[%s]信息不存在", produceSn.getProductSn(), produceSn.getWorkCenterCode());
return workCenter;
}
private List<MesWorkCellScanMonitorLog> getWorkCellScanMonitorLogList(List<MesProductionRecord> productionRecordList) {
if (CollectionUtils.isEmpty(productionRecordList)) return null;
List<MesWorkCellScanMonitorLog> workCellScanMonitorLogList = new ArrayList<>();
for (MesProductionRecord productionRecord : productionRecordList) {
if (null == productionRecord) continue;
//云端 MesWorkCellScanMonitorLog 按照 工厂+生产线 分表 只能根据开模ID查询, 条码字段是产出条码 不是主条码, 一模多腔场景存的是多个条码分号分隔
DdlPackBean packBean = DdlPackBean.getDdlPackBean(productionRecord.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(productionRecord.getWorkCenterCode(), MesExtConstWords.WORK_CENTER_CODE, packBean);
DdlPreparedPack.getStringEqualPack(productionRecord.getWorkCellCode(), MesExtConstWords.WORK_CELL_CODE, packBean);
DdlPreparedPack.getNumEqualPack(productionRecord.getMouldRecordId(), MesExtConstWords.MOULD_RECORD_ID, packBean);
List<MesWorkCellScanMonitorLog> itemList = workCellScanMonitorLogRepository.findByHqlWhere(packBean);
if (!CollectionUtils.isEmpty(itemList)) workCellScanMonitorLogList.addAll(itemList);
}
return workCellScanMonitorLogList;
}
private Map<String, MesProcess> getMesProcessMap(MesProduceSn mesProduceSn, List<String> processCodeList) {
Map<String, MesProcess> processMap = null;
if(!CollectionUtils.isEmpty(processCodeList)){

@ -1,5 +1,6 @@
package cn.estsh.i3plus.ext.mes.apiservice.utils;
import cn.estsh.i3plus.ext.mes.api.base.file.IMesFileService;
import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCellScanMonitorLog;
@ -26,7 +27,7 @@ import static cn.estsh.i3plus.ext.mes.apiservice.dbinterface.WmsSAPDbQuery.lz;
public class MesTraceabilityTemp {
public static String getMesTraceabilityTemp(MesTraceabilityReportModel mesTraceabilityReportModel) throws IOException {
public static String getMesTraceabilityTemp(IMesFileService mesFileService,MesTraceabilityReportModel mesTraceabilityReportModel) throws IOException {
String url = "";
File file = new File(System.getProperty("java.io.tmpdir") + File.separator + "追溯报表orgPdf" + mesTraceabilityReportModel.getProductSn() + "-" + mesTraceabilityReportModel.getPartNo() + ".PDF");
File destFile = null;
@ -615,22 +616,6 @@ public class MesTraceabilityTemp {
equtable.addCell(equcontentCell21);
index++;
}
} else {
// 构建每一列
PdfPCell equcontentCell00 = new PdfPCell(new Paragraph("", tableValueFont));
equcontentCell00.setHorizontalAlignment(Element.ALIGN_LEFT);
equcontentCell00.setBorder(Rectangle.NO_BORDER);
equcontentCell00.setColspan(1);
equtable.addCell(equcontentCell00);
PdfPCell equcontentCell11 = new PdfPCell(new Paragraph(" ", tableValueFont));
equcontentCell11.setHorizontalAlignment(Element.ALIGN_CENTER);
equcontentCell11.setVerticalAlignment(Element.ALIGN_MIDDLE);
equcontentCell11.setPaddingBottom(3);
equcontentCell11.setPaddingTop(1);
equcontentCell11.setBackgroundColor(new BaseColor(253, 239, 192));//黄色
equcontentCell11.setColspan(8);
equtable.addCell(equcontentCell11);
}
document.add(equtable);
@ -640,7 +625,7 @@ public class MesTraceabilityTemp {
//添加分页
destFile = new File(PageNumPdfPageEvent.addPageNum(file.getPath(), file.getPath().replace("追溯报表orgPdf", "追溯报表")));
//文件上传
url = HuaWeiOBSUtil.putObjectByMultipartFile(MesCommonConstant.OBS_BUCKET_NAME, destFile.getName(), convert(destFile)).getObjectUrl();
url = mesFileService.uploadFile(convert(destFile)).getFilePath();
} catch (DocumentException | IOException e) {
MesException.throwMesBusiException("生成PDF文件失败");
} finally {

@ -129,6 +129,8 @@ public class MesExtConstWords {
public static final String MESSAGE_TYPE = "messageType";
//枚举代码
public static final String ENUM_CODE = "enumCode";
//组件类型
public static final String MODULE_TYPE = "moduleType";
//时间[开始/结束]条件
public static final String START_TIME_START = "startTimeStart";

Loading…
Cancel
Save