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

tags/yfai-mes-ext-v1.6
xiangwei.zhang 10 months ago
commit 85bed73d4e

@ -3,17 +3,40 @@ package cn.estsh.i3plus.ext.mes.api.base;
import cn.estsh.i3plus.pojo.mes.bean.MesConfig;
import io.swagger.annotations.ApiOperation;
import java.util.List;
/**
* @Description:
* @CreateDate: 2021/9/9 3:24
* @Author: simon.song
*/
public interface IMesConfigService {
@ApiOperation(value = "获取配置表模板代码")
String getCfgValue(String org, String key);
@ApiOperation(value = "获取配置表模板代码")
MesConfig getCfgValueByCode(String key);
@ApiOperation(value = "获取配置表模板代码")
MesConfig getCfgValueByCode(String organizeCode,String key);
@ApiOperation(value = "获取系统配置集合")
List<MesConfig> getConfigList(String organizeCode, String cfgCode, String cfgKey, String cfgType);
@ApiOperation(value = "根据分隔符验证是否存在元素的配置")
Boolean checkCfgValueIsContainItem(String organizeCode, String cfgCode, String cfgKey, String cfgType, String splitStr, String item);
@ApiOperation(value = "验证分表配置")
Boolean checkShardingTablesObjectCfg(String organizeCode, String cfgKey, String item);
@ApiOperation(value = "根据分隔符查询存在元素的配置")
List<String> findCfgValueContainItem(String organizeCode, String cfgCode, String cfgKey, String cfgType, String splitStr, List<String> itemList);
@ApiOperation(value = "查询分表配置")
List<String> findShardingTablesObjectCfg(String organizeCode, String cfgKey, List<String> itemList);
@ApiOperation(value = "更新配置")
void update(MesConfig mesConfig,String userName);
}

@ -0,0 +1,13 @@
package cn.estsh.i3plus.ext.mes.api.base;
import cn.estsh.i3plus.pojo.mes.dbinterface.MesInterfaceDataMapper;
/**
* @Description :
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/8/22 9:59
* @Modify:
**/
public interface IMesInterfaceDataMapperService extends IBaseMesService<MesInterfaceDataMapper> {
}

@ -16,4 +16,7 @@ public interface IMesProduceSnService extends IBaseMesService<MesProduceSn> {
@ApiOperation(value = "根据条码查询产品条码表")
List<MesProduceSn> findMesProduceSn(String organizeCode, String sn);
@ApiOperation(value = "查询条码信息")
List<MesProduceSn> findMesProduceSnList(String organizeCode, List<String> snList);
}

@ -1,6 +1,9 @@
package cn.estsh.i3plus.ext.mes.api.base;
import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord;
import cn.estsh.i3plus.pojo.mes.model.MesProductionRecordModel;
import io.swagger.annotations.ApiOperation;
import java.util.List;
@ -16,4 +19,9 @@ public interface IMesProductionRecordService extends IBaseMesService<MesProducti
@ApiOperation(value = "根据条码查询设备加工记录表")
List<MesProductionRecord> findMesProductionRecord(String organizeCode, String sn);
ListPager queryRecordGroupByPartNoWorkCellCode(MesProductionRecord mesProductionRecord, Pager pager);
@ApiOperation(value = "线边库存报表")
ListPager<MesProductionRecordModel> queryMesProductionOffLine(MesProductionRecordModel mesProductionRecordModel,Pager pager);
}

@ -0,0 +1,13 @@
package cn.estsh.i3plus.ext.mes.api.base;
import cn.estsh.i3plus.pojo.mes.bean.MesScriptPersistence;
/**
* @Description :
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/8/22 11:03
* @Modify:
**/
public interface IMesScriptPersistenceService extends IBaseMesService<MesScriptPersistence> {
}

@ -4,6 +4,9 @@ import cn.estsh.i3plus.ext.mes.pojo.model.MesShippingOrderManagementDetailModel;
import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail;
import io.swagger.annotations.ApiOperation;
import java.util.List;
/**
* @Description:
@ -15,4 +18,9 @@ public interface IMesShippingOrderManagementDetailService extends IBaseMesServic
public ListPager<MesShippingOrderManagementDetailModel> queryDetailGroupByPartNo(MesShippingOrderManagementDetail bean, Pager pager);
@ApiOperation("查询发运单明细")
ListPager<MesShippingOrderManagementDetailModel> queryMesShippingDetailsByPager(MesShippingOrderManagementDetailModel mesShippingOrderManagementDetailModel, Pager pager);
@ApiOperation("发运退回")
void doShippingBack(Long[] idList,String organizeCode,String userName);
}

@ -31,7 +31,7 @@ public interface IMesWorkOrderService extends IBaseMesService<MesWorkOrder> {
void deleteUnSortOrder(String organizeCode, List<String> partNoList);
@ApiOperation("汇总工单给SAP")
List<MesWorkOrderModel> sumMesWorkOrderQtyToSap(String organizeCode);
List<MesWorkOrderModel> sumMesWorkOrderQtyToSap(String organizeCode,String lastSendToSapTime);
@ApiOperation("ccscTest")
List<MesWorkOrder> queryMesWorkOrderProcessToSap(String organizeCode);

@ -15,5 +15,5 @@ import java.util.List;
public interface IMesWorkOrderToSapService extends IBaseMesService<MesWorkOrderToSap> {
MesWorkOrderToSap insert(MesWorkOrderModel mesWorkOrder);
void doMesWorkOrder(String organizeCode,List<MesWorkOrderModel> mesWorkOrderList);
void doMesWorkOrder(String organizeCode,String userName,List<MesWorkOrderModel> mesWorkOrderList);
}

@ -18,5 +18,6 @@ public interface IMesSpotCheckOrderService extends IBaseMesService<MesSpotCheckO
@ApiOperation("生成点检单")
void insertMesSpotCheckOrder(List<MesEquipmentSpotCheck> mesEquipmentSpotCheckList, String userName);
@ApiOperation("点检单结果打印")
MesSpotCheckOrder queryMesSpotCheckOrderResultPrint(MesSpotCheckOrder mesSpotCheckOrder);
}

@ -6,6 +6,7 @@ import cn.estsh.i3plus.ext.mes.pojo.model.report.MesProdRuleReportConditionModel
import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord;
import cn.estsh.i3plus.pojo.mes.model.report.MesTraceabilityReportModel;
import cn.estsh.impp.framework.boot.util.ResultBean;
import io.swagger.annotations.ApiOperation;
@ -41,4 +42,10 @@ public interface IMesYfReportService {
@ApiOperation("查询追溯报表")
List<MesTraceabilityReportModel> findTraceabilityReport(MesProduceSn mesProduceSn);
@ApiOperation("零件条码状态查询")
ListPager<MesProduceSn> queryMesProduceSn(MesProduceSn mesProduceSn, Pager pager);
@ApiOperation("产品加工记录")
ListPager<MesProductionRecord> queryMesProductionRecord(MesProductionRecord mesProductionRecord, Pager pager);
}

@ -1,8 +1,11 @@
import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant
import cn.estsh.i3plus.mes.api.iservice.busi.ISyncFuncService
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.model.GenSerialNoModel
import cn.estsh.i3plus.pojo.mes.repository.MesShippingOrderManagementRepository
import org.slf4j.Logger
import org.slf4j.LoggerFactory
@ -23,6 +26,9 @@ class MesToPiscesMesJisShipping {
@Autowired
private MesShippingOrderManagementRepository mesShippingOrderManagementRepository;
@Autowired
private ISyncFuncService syncFuncService;
def filterData(MesInterfaceDataMapper mapper, List<Map<String, Object>> srcData) throws Exception {
if (srcData == null || srcData.size() == 0) {
return srcData
@ -47,6 +53,16 @@ class MesToPiscesMesJisShipping {
destData.put(key, rowMap)
}
}
//TRANS_ID
if(mapper.getDestColumnMapping().contains("TRANS_ID")){
GenSerialNoModel orderSeqSerialNoModel = new GenSerialNoModel("JIS_SHIPPING_TRANS_ID");
List<String> resultList = syncFuncService.syncSerialNo(orderSeqSerialNoModel.organizeCode(organizeCode), "MES2PISCES发运单", organizeCode, destData.size()).getResultList();
int index = 0;
for (Map<String, Object> rowMap : destData.values()) {
rowMap.put("TRANS_ID",resultList.get(index));
index++;
}
}
return new ArrayList<>(destData.values());
}

@ -1,4 +1,6 @@
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack
import cn.estsh.i3plus.pojo.mes.bean.MesPartShippingGroup
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesLoadingList
import cn.estsh.i3plus.pojo.mes.dbinterface.MesInterfaceDataMapper
@ -29,23 +31,20 @@ class MesToPiscesMesLoadingListDetail {
if (srcData == null || srcData.size() == 0) {
return srcData
}
Map<Long, MesShippingOrderManagement> mesProductionRecordMap = new HashMap<>();
String organizeCode = mapper.getOrganizeCode();
Map<String, MesShippingOrderManagement> mesProductionRecordMap = new HashMap<>();
Map<Long, MesLoadingList> mesLoadingListMap = new HashMap<>();
for (Map<String, Object> rowMap : srcData) {
//
if (!StringUtils.isEmpty(rowMap.get("shipping_id"))) {
long shippingId = Long.parseLong(String.valueOf(rowMap.get("shipping_id")));
if (Objects.isNull(mesProductionRecordMap) || !mesProductionRecordMap.containsKey(shippingId)) {
mesProductionRecordMap.put(shippingId, mesShippingRepository.getById(shippingId))
}
MesShippingOrderManagement mesProductionRecord = mesProductionRecordMap.get(shippingId)
if (!Objects.isNull(mesProductionRecord)) {
rowMap.put("SHIPPING_FID", mesProductionRecord.getFid())
if (!StringUtils.isEmpty(rowMap.get("shipping_code"))) {
MesShippingOrderManagement mesShippingOrderManagement = getShippingCode(organizeCode,String.valueOf(rowMap.get("shipping_code")),mesProductionRecordMap)
if (!Objects.isNull(mesShippingOrderManagement)) {
rowMap.put("SHIPPING_FID", mesShippingOrderManagement.getFid())
} else {
rowMap.put("SHIPPING_FID", null)
LOGGER.info("发运单id{},信息不存在", String.valueOf(rowMap.get(rowMap.get("shipping_id"))))
LOGGER.info("发运单shipping_code{},信息不存在", String.valueOf(rowMap.get("shipping_code")))
}
}else{
rowMap.put("SHIPPING_FID", null)
@ -61,7 +60,7 @@ class MesToPiscesMesLoadingListDetail {
rowMap.put("LOADING_LIST_FID", mesLoadingList.getFid())
} else {
rowMap.put("LOADING_LIST_FID", null)
LOGGER.info("装车id{},信息不存在", String.valueOf(rowMap.get(rowMap.get("pid"))))
LOGGER.info("装车id{},信息不存在", String.valueOf(rowMap.get("pid")))
}
}else{
rowMap.put("LOADING_LIST_FID", null)
@ -70,4 +69,14 @@ class MesToPiscesMesLoadingListDetail {
return srcData;
}
private MesShippingOrderManagement getShippingCode(String organizeCode, String shippingCode, Map<String, MesShippingOrderManagement> mesShippingOrderManagementMap) {
if (Objects.isNull(mesShippingOrderManagementMap) || !mesShippingOrderManagementMap.containsKey(shippingCode)) {
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(shippingCode, "shippingCode", ddlPackBean);
mesShippingOrderManagementMap.put(shippingCode, mesShippingRepository.getByProperty(ddlPackBean))
}
return mesShippingOrderManagementMap.get(shippingCode);
}
}

@ -58,7 +58,7 @@ class MesToPiscesMesShippingDetail {
rowMap.put("SHIPPING_FID", mesProductionRecord.getFid())
} else {
rowMap.put("SHIPPING_FID", null)
LOGGER.info("发运单id{},信息不存在", String.valueOf(rowMap.get(rowMap.get("pid"))))
LOGGER.info("发运单id{},信息不存在", String.valueOf(rowMap.get("pid")))
}
}else{
rowMap.put("SHIPPING_FID", null)

@ -1,3 +1,4 @@
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.tool.DdlPreparedPack
@ -5,13 +6,17 @@ 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 cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil
import lombok.Getter
import lombok.Setter
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 org.springframework.util.StringUtils
import javax.annotation.Resource
import java.sql.Connection
/**
* @Description :
@ -30,6 +35,10 @@ class MesToPiscesProductSn {
@Resource(name = "mesDataSource")
private DynamicDataSourceProxy mesDataSource;
@Getter
@Setter
private Connection mesConn;
def readData(MesInterfaceDataMapper mapper) throws Exception {
String organizeCode = mapper.getOrganizeCode();
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
@ -40,12 +49,19 @@ class MesToPiscesProductSn {
return new ArrayList<>();
}
List<Map<String, Object>> srcData = new ArrayList<>();
List<String> updateList = new ArrayList<>();
//
for (MesCrossOrganizeCfg crossOrganizeCfg : crossOrganizeCfgList) {
Map<String, Object> params = new HashMap<>();
params.put("srcOrganizeCode", crossOrganizeCfg.getOrganizeCode())
params.put("partNo", crossOrganizeCfg.getPartNo())
String sql = "select * from " + mapper.getSrcTableName() + " where organize_code = :srcOrganizeCode and part_no = :partNo and " + mapper.getSrcWhere() + " order by " + mapper.getSrcOrderBy() + " limit " + mapper.getSrcGetLimit()
if (StringUtils.isEmpty(crossOrganizeCfg.getLastCreateDatetime())) {
params.put("createDateTime", TimeTool.pareDateToString(new Date(0)));
} else {
params.put("createDateTime", crossOrganizeCfg.getLastCreateDatetime())
}
String sql = "select * from " + mapper.getSrcTableName() + " where organize_code = :srcOrganizeCode and part_no = :partNo and create_date_time >= :createDateTime and " + mapper.getSrcWhere() + " order by " + mapper.getSrcOrderBy() + " limit " + mapper.getSrcGetLimit()
//
List<Map<String, Object>> dataList = queryDataTable(sql, params);
if (!CollectionUtils.isEmpty(dataList)) {
@ -54,7 +70,16 @@ class MesToPiscesProductSn {
rowMap.put("DEST_ORGANIZE_CODE", crossOrganizeCfg.getSrcOrganizeCode())
}
srcData.addAll(dataList);
String createDateTime = dataList.iterator().next().get("create_date_time")
//
updateList.add("update mes_cross_organize_cfg set last_create_date_time = '"+createDateTime+"',last_exe_time = '"+ TimeTool.getNowTime(true)+"' where id= " + crossOrganizeCfg.getId() + " ;")
}
}
//
if (!CollectionUtils.isEmpty(updateList) && updateList.size() > 0) {
this.mesConn = mesDataSource.getWriteConnectionWithoutPool();
mesDataSource.executeAsBatch(updateList, mesConn)
mesDataSource.closeConnectionWithoutPoll(this.mesConn)
}
return srcData;
}

@ -73,7 +73,7 @@ class MesToPiscesProductionAssembly {
if (!Objects.isNull(mesProductionRecord)) {
rowMap.put("PRODUCTION_LOG_FID", mesProductionRecord.getFid())
} else {
LOGGER.info("原材料容器id{},信息不存在", String.valueOf(rowMap.get(rowMap.get("production_record_id"))))
LOGGER.info("原材料容器id{},信息不存在", String.valueOf(rowMap.get("production_record_id")))
}
}else{
rowMap.put("PRODUCTION_LOG_FID", null)

@ -1,13 +1,11 @@
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.tool.DdlPreparedPack
import cn.estsh.i3plus.pojo.mes.bean.MesEquipment
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder
import cn.estsh.i3plus.pojo.base.util.StringUtil
import cn.estsh.i3plus.pojo.mes.bean.*
import cn.estsh.i3plus.pojo.mes.dbinterface.MesInterfaceDataMapper
import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentRepository
import cn.estsh.i3plus.pojo.mes.repository.MesProduceSnRepository
import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderRepository
import cn.estsh.i3plus.pojo.mes.repository.*
import lombok.Getter
import lombok.Setter
import org.slf4j.Logger
@ -15,6 +13,7 @@ import org.slf4j.LoggerFactory
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate
import org.springframework.util.CollectionUtils
import org.springframework.util.StringUtils
import javax.annotation.Resource
import java.sql.Connection
@ -30,6 +29,8 @@ class MesProductionRecordToPisces {
public static final Logger LOGGER = LoggerFactory.getLogger(MesProductionRecordToPisces.class)
private static final String[] workCenterCodeList = ["B19CK01A", "B15CK01A", "C06CK01A", "C06CK01B", "C09CK01A", "C12CK01A"] as String[];
@Autowired
private MesEquipmentRepository equipmentRepository;
@ -49,31 +50,93 @@ class MesProductionRecordToPisces {
@Setter
private Connection mesConn;
@Autowired
private MesWorkCenterRepository mesWorkCenterRepository;
@Autowired
private MesWorkCellRepository mesWorkCellRepository;
@Autowired
private MesProcessRepository mesProcessRepository;
def filterData(MesInterfaceDataMapper mapper, List<Map<String, Object>> srcData) throws Exception {
if (srcData == null || srcData.size() == 0) {
return srcData
}
List<String> updateList = new ArrayList<>();
String organizeCode = mapper.getOrganizeCode();
Map<String, MesWorkCenter> mesWorkCenterMap = new HashMap<>();
Map<String, MesWorkCell> mesWorkCellMap = new HashMap<>();
Map<String, MesProcess> mesProcessMap = new HashMap<>();
List<String> idList = new ArrayList<>();
List<Map<String, Object>> destData = new ArrayList<>();
for (Map<String, Object> rowMap : srcData) {
Map<String, Object> params = new HashMap<>();
params.put("partNo", rowMap.get("part_no"))
params.put("productSn", rowMap.get("product_sn"))
String sql = "select ID from MES.TT_PC_PART_BARCODE where PART_NO = :partNo and BARCODE = :productSn order by GENERATION_TIME desc";
String sql = "select top 1 ID from MES.TT_PC_PART_BARCODE where PART_NO = :partNo and BARCODE = :productSn order by GENERATION_TIME desc";
List<Map<String, Object>> dataMap = queryDataTable(sql, params);
if (!CollectionUtils.isEmpty(dataMap) && dataMap.size() > 0) {
rowMap.put("BARCODE_ID", dataMap.iterator().next().get("ID"))
updateList.add("update mes_production_record set system_sync_status = 1 where id= "+rowMap.get("id")+" ;")
idList.add(rowMap.get("id").toString());
} else {
LOGGER.info("条码{}物料{}条码信息未同步,信息不存在", rowMap.get("product_sn"),rowMap.get("part_no"))
continue
}
String workCenterCode = String.valueOf(rowMap.get("work_center_code"));
if (!workCenterCodeList.contains(workCenterCode)) {
String workOrderNo = String.valueOf(rowMap.get("work_order_no"));
MesWorkOrder workOrderDb = getWorkOrderDb(mapper.getOrganizeCode(), workOrderNo);
if (!Objects.isNull(workOrderDb)) {
rowMap.put("WORK_ORDER_FID", workOrderDb.getFid())
} else {
rowMap.put("WORK_ORDER_FID", null)
}
} else {
rowMap.put("WORK_ORDER_FID", null)
}
//
MesWorkCenter mesWorkCenter = getMesWorkCenter(organizeCode, workCenterCode, mesWorkCenterMap)
if (!Objects.isNull(mesWorkCenter)) {
rowMap.put("work_center_code", mesWorkCenter.getDescription())
} else {
LOGGER.info("工作中心{},信息不存在", workCenterCode)
}
//
if (!StringUtil.isEmpty(rowMap.get("work_cell_code"))) {
String workCellCode = String.valueOf(rowMap.get("work_cell_code"));
MesWorkCell mesWorkCell = getMesWorkCell(organizeCode, workCellCode, mesWorkCellMap)
if (!Objects.isNull(mesWorkCell)) {
rowMap.put("work_cell_code", mesWorkCell.getDescription())
} else {
LOGGER.info("工位{},信息不存在", workCellCode)
}
}
//
if (!StringUtil.isEmpty(rowMap.get("process_code"))) {
String processCode = String.valueOf(rowMap.get("process_code"));
MesProcess mesProcess = getMesProcess(organizeCode, processCode, mesProcessMap)
if (!Objects.isNull(mesProcess)) {
rowMap.put("process_code", mesProcess.getDescription())
} else {
LOGGER.info("工序{},信息不存在", processCode)
}
}
//
if (!StringUtil.isEmpty(rowMap.get("work_center_code")) && !StringUtil.isEmpty(rowMap.get("process_code")) && !StringUtil.isEmpty(rowMap.get("shift_code"))) {
params = new HashMap<>();
params.put("workCenterCode", rowMap.get("work_center_code"))
params.put("processCode", rowMap.get("process_code"))
params.put("shiftCode", 1 == Integer.parseInt(rowMap.get("shift_code").toString()).intValue() ? "早班" : "晚班")
sql = "select top 1 ID from MES.TL_PS_SHIFT_START where ASSEMBLY_LINE = :workCenterCode and SHIFT_NAME = :shiftCode and SHIFT_GROUP_CODE = :processCode order by ID desc";
dataMap = queryDataTable(sql, params);
if (!CollectionUtils.isEmpty(dataMap) && dataMap.size() > 0) {
rowMap.put("SHIFT_START_ID", dataMap.iterator().next().get("ID"))
}
}
if (StringUtil.isEmpty(rowMap.get("SHIFT_START_ID"))) {
rowMap.put("SHIFT_START_ID", null)
}
String equipmentCode = String.valueOf(rowMap.get("equipment_code"));
@ -85,7 +148,9 @@ class MesProductionRecordToPisces {
}
//
if(!CollectionUtils.isEmpty(updateList) && updateList.size() > 0){
if (!CollectionUtils.isEmpty(idList) && idList.size() > 0) {
List<String> updateList = new ArrayList<>();
updateList.add("update mes_production_record set system_sync_date_time='"+ TimeTool.getNowTime(true)+"',system_sync_status = 1 where id in (" + String.join(",",idList) + ") ;")
this.mesConn = mesDataSource.getWriteConnectionWithoutPool();
mesDataSource.executeAsBatch(updateList, mesConn)
mesDataSource.closeConnectionWithoutPoll(this.mesConn)
@ -94,14 +159,6 @@ class MesProductionRecordToPisces {
return destData;
}
def getProduceSnDb(String organizeCode, String productSn, String partNo) {
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(productSn, "productSn", ddlPackBean);
DdlPreparedPack.getStringEqualPack(partNo, "partNo", ddlPackBean);
MesProduceSn produceSnDb = produceSnRepository.getByProperty(ddlPackBean);
return produceSnDb;
}
MesWorkOrder getWorkOrderDb(String organizeCode, String workOrderNo) {
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(workOrderNo, "workOrderNo", ddlPackBean);
@ -122,4 +179,38 @@ class MesProductionRecordToPisces {
return dataMap;
}
private MesWorkCenter getMesWorkCenter(String organizeCode, String workCenterCode, Map<String, MesWorkCenter> mesWorkCenterMap) {
if (Objects.isNull(mesWorkCenterMap) || !mesWorkCenterMap.containsKey(workCenterCode)) {
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", ddlPackBean);
mesWorkCenterMap.put(workCenterCode, mesWorkCenterRepository.getByProperty(ddlPackBean))
}
return mesWorkCenterMap.get(workCenterCode);
}
private MesWorkCell getMesWorkCell(String organizeCode, String workCenterCell, Map<String, MesWorkCell> mesWorkCellMap) {
if (Objects.isNull(mesWorkCellMap) || !mesWorkCellMap.containsKey(workCenterCell)) {
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(workCenterCell, "workCellCode", ddlPackBean);
mesWorkCellMap.put(workCenterCell, mesWorkCellRepository.getByProperty(ddlPackBean))
}
return mesWorkCellMap.get(workCenterCell);
}
private MesProcess getMesProcess(String organizeCode, String processCode, Map<String, MesProcess> mesProcessMap) {
if (Objects.isNull(mesProcessMap) || !mesProcessMap.containsKey(processCode)) {
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(processCode, "processCode", ddlPackBean);
mesProcessMap.put(processCode, mesProcessRepository.getByProperty(ddlPackBean))
}
return mesProcessMap.get(processCode);
}
def saveSrcData(MesInterfaceDataMapper mapper, List<Map<String, Object>> srcData) throws Exception {
if (srcData == null || srcData.size() == 0 || StringUtils.isEmpty(mapper.getSrcTableName())) {
return srcData
}
}
}

@ -0,0 +1,44 @@
import cn.estsh.i3plus.platform.common.tool.TimeTool
import cn.estsh.i3plus.platform.plugin.datasource.DynamicDataSourceProxy
import cn.estsh.i3plus.pojo.mes.dbinterface.MesInterfaceDataMapper
import lombok.Getter
import lombok.Setter
import org.springframework.util.StringUtils
import javax.annotation.Resource
import java.sql.Connection
/**
* @Description :MES2PISCES-
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/8/5 20:19
* @Modify:
* */
class MesUpdateSrcData {
@Resource(name = "mesDataSource")
private DynamicDataSourceProxy mesDataSource;
@Getter
@Setter
private Connection mesConn;
def saveSrcData(MesInterfaceDataMapper mapper, List<Map<String, Object>> srcData) throws Exception {
if (srcData == null || srcData.size() == 0 || StringUtils.isEmpty(mapper.getSrcTableName())) {
return srcData
}
List<String> idList = new ArrayList<>();
for (Map<String, Object> data : srcData) {
idList.add(data.get("id").toString());
}
//
List<String> updateList = new ArrayList<>();
updateList.add("update " + mapper.getSrcTableName() + " set system_sync_date_time='" + TimeTool.getNowTime(true) + "',system_sync_status='1' where id in (" + String.join(",", idList) + ") ;");
this.mesConn = mesDataSource.getWriteConnectionWithoutPool();
mesDataSource.executeAsBatch(updateList, mesConn)
mesDataSource.closeConnectionWithoutPoll(this.mesConn)
}
}

@ -1,23 +1,39 @@
package cn.estsh.i3plus.ext.mes.apiservice.controller.base;
import cn.estsh.i3plus.ext.mes.api.base.IMesEnumExtService;
import cn.estsh.i3plus.ext.mes.api.base.IMesShippingOrderManagementDetailService;
import cn.estsh.i3plus.ext.mes.api.busi.report.IMesYfReportService;
import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException;
import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.ext.mes.pojo.model.MesShippingOrderManagementDetailModel;
import cn.estsh.i3plus.platform.common.tool.ExcelTool;
import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import cn.estsh.i3plus.pojo.model.common.ExportDataModel;
import cn.estsh.impp.framework.base.controller.MesBaseController;
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 com.alibaba.fastjson.JSON;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import javax.persistence.EntityManager;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Objects;
/**
* @Description:
@ -35,6 +51,15 @@ public class BaseExtDataController extends MesBaseController {
@Autowired
private IMesEnumExtService enumService;
@Autowired
private IMesYfReportService mesYfReportService;
@Autowired
private IMesShippingOrderManagementDetailService mesShippingOrderManagementDetailService;
@Autowired
private EntityManager entityManager;
@GetMapping(value = "/enumlist")
@ApiOperation(value = "获取MES系统所有枚举")
public ResultBean enumlist(@RequestParam(name = "enumName") String enumName) {
@ -81,5 +106,82 @@ public class BaseExtDataController extends MesBaseController {
}
}
@ApiOperation(value = "导出", notes = "导出")
@PostMapping("/data-export")
public ResultBean doDataExport(@RequestBody ExportDataModel exportDataModel, HttpServletResponse response) {
try {
ValidatorBean.beginValid(exportDataModel)
.notNull("exportCol", exportDataModel.getExportCol())
.notNull("selectWhere", exportDataModel.getSelectWhere())
.notNull("module", exportDataModel.getModule());
File excelFile = null;
ExcelTool excelTool = new ExcelTool(this.entityManager, RedisCacheTool.getImppRedis());
Class mesClass = null;
ListPager listPager = null;
switch (MesExtEnumUtil.DATA_EXPORT.valueOfCode(exportDataModel.getModule())){
case MES_PRODUCE_SN_DATA_EXPORT:
mesClass = MesProduceSn.class;
//查询数据
listPager = mesYfReportService.queryMesProduceSn(JSON.parseObject(exportDataModel.getSelectWhere(), MesProduceSn.class),null);break;
case MES_PRODUCTION_RECORD_DATA_EXPORT:
mesClass = MesProductionRecord.class;
//查询数据
listPager = mesYfReportService.queryMesProductionRecord(JSON.parseObject(exportDataModel.getSelectWhere(), MesProductionRecord.class),null);break;
case MES_SHIPPING_DETAIL_DATA_EXPORT:
mesClass = MesShippingOrderManagementDetailModel.class;
//查询数据
listPager = mesShippingOrderManagementDetailService.queryMesShippingDetailsByPager(JSON.parseObject(exportDataModel.getSelectWhere(), MesShippingOrderManagementDetailModel.class),null);break;
default:
break;
}
if(Objects.isNull(listPager) || CollectionUtils.isEmpty(listPager.getObjectList())){
MesException.throwMesBusiException("未查询到有效数据");
}
LinkedHashMap<String, String> exportCol = (LinkedHashMap) JSON.parseObject(exportDataModel.getExportCol(), LinkedHashMap.class);
excelFile = new File(System.getProperty("java.io.tmpdir") + File.separator + mesClass.getSimpleName() + ".xls");
excelFile.createNewFile();
excelTool.exportData(excelFile, listPager.getObjectList(), mesClass, exportCol);
response.setContentType("application/vnd.ms-excel;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(excelFile.getName(), "UTF-8"));
response.flushBuffer();
BufferedInputStream bis = null;
try {
bis = new BufferedInputStream(new FileInputStream(excelFile));
OutputStream os = response.getOutputStream();
byte[] buffer = new byte[1024];
for(int i = bis.read(buffer); i != -1; i = bis.read(buffer)) {
os.write(buffer, 0, i);
}
} catch (Exception var28) {
var28.printStackTrace();
} finally {
if (bis != null) {
try {
bis.close();
excelFile.delete();
} catch (IOException var27) {
var27.printStackTrace();
}
}
}
return ResultBean.success("导出成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
} catch (ImppBusiException var30) {
return ResultBean.fail(var30);
} catch (Exception var31) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(var31);
}
}
}

@ -0,0 +1,20 @@
package cn.estsh.i3plus.ext.mes.apiservice.controller.base;
import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.pojo.mes.dbinterface.MesInterfaceDataMapper;
import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @Description :
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/8/22 9:57
* @Modify:
**/
@Api(description = "接口数据映射")
@RestController
@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesInterfaceDataMapper")
public class MesInterfaceDataMapperController extends BaseMesController<MesInterfaceDataMapper> {
}

@ -0,0 +1,49 @@
package cn.estsh.i3plus.ext.mes.apiservice.controller.base;
import cn.estsh.i3plus.ext.mes.api.base.IMesProductionRecordService;
import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord;
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 cn.estsh.impp.framework.boot.util.ValidatorBean;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @Description :
* @Reference :
* @Author : gsz
* @CreateDate 2024/8/10 10:50
* @Modify:
**/
@Api("设备加工记录")
@RestController
@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesProductionRecord")
public class MesProductionRecordController extends BaseMesController<MesProductionRecord>{
@Autowired
private IMesProductionRecordService mesProductionRecordService;
@GetMapping(value = "/group-by-part-cell/query")
@ApiOperation(value = "设备加工记录", notes = "设备加工记录")
public ResultBean queryProductionRecordGroupByPartNoWorkCellCode(MesProductionRecord mesProductionRecord, Pager pager) {
try {
ValidatorBean.beginValid(mesProductionRecord)
.notNull("organizeCode", mesProductionRecord.getOrganizeCode());
return ResultBean.success("查询成功").setListPager(mesProductionRecordService.queryRecordGroupByPartNoWorkCellCode(mesProductionRecord, pager))
.setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
} catch (ImppBusiException busExcep) {
return ResultBean.fail(busExcep);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
}

@ -0,0 +1,20 @@
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.MesScriptPersistence;
import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @Description :
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/8/22 9:57
* @Modify:
**/
@Api(description = "动态脚本")
@RestController
@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesScriptPersistence")
public class MesScriptPersistenceController extends BaseMesController<MesScriptPersistence> {
}

@ -1,7 +1,9 @@
package cn.estsh.i3plus.ext.mes.apiservice.controller.base;
import cn.estsh.i3plus.ext.mes.api.base.IMesShippingOrderManagementDetailService;
import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException;
import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.ext.mes.pojo.model.MesShippingOrderManagementDetailModel;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail;
@ -12,9 +14,9 @@ import cn.estsh.impp.framework.boot.util.ResultBean;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import java.util.Objects;
@Api("发运单管理明细")
@RestController
@ -40,4 +42,31 @@ public class MesShippingOrderManagementDetailController extends BaseMesControlle
}
}
@ApiOperation(value = "发运单明细", notes = "发运单明细")
@GetMapping("/master/query")
public ResultBean queryMesShippingDetailsByPager(MesShippingOrderManagementDetailModel mesShippingOrderManagementDetailModel, Pager pager) {
try {
return ResultBean.success("查询成功").setListPager(shippingOrderManagementDetailService.queryMesShippingDetailsByPager(mesShippingOrderManagementDetailModel,pager));
} catch (ImppBusiException e) {
return ResultBean.fail(e);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
@ApiOperation(value = "发运退回", notes = "发运退回")
@PutMapping("/doShippingBack")
public ResultBean doShippingBack(@RequestBody Long[] idList) {
try {
if(Objects.isNull(idList) || idList.length <= 0) MesException.throwMesBusiException("选择数据无效,请检查");
shippingOrderManagementDetailService.doShippingBack(idList,AuthUtil.getOrganizeCode(),AuthUtil.getSessionUser().getUserName());
return ResultBean.success("退回成功");
} catch (ImppBusiException e) {
return ResultBean.fail(e);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
}

@ -1,15 +1,19 @@
package cn.estsh.i3plus.ext.mes.apiservice.controller.base;
import cn.estsh.i3plus.ext.mes.api.base.IMesConfigService;
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.apiservice.utils.MesException;
import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.mes.apiservice.util.DateUtil;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.platform.common.tool.TimeTool;
import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesConfig;
import cn.estsh.i3plus.pojo.mes.bean.MesProductVersion;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder;
import cn.estsh.i3plus.pojo.mes.model.MesWorkOrderModel;
@ -31,6 +35,7 @@ import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
@ -46,6 +51,9 @@ public class MesWorkOrderController extends BaseMesController<MesWorkOrder> {
@Autowired
private IMesWorkOrderToSapService mesWorkOrderToSapService;
@Autowired
private IMesConfigService mesConfigService;
@ApiOperation(value = "查询生产版本", notes = "查询生产版本")
@GetMapping("/mesProductVersion/query")
public ResultBean queryMesProdRuleByPager(MesProductVersion mesProductVersion, Pager pager){
@ -151,10 +159,19 @@ public class MesWorkOrderController extends BaseMesController<MesWorkOrder> {
@ApiOperation(value = "发送给sap")
public ResultBean sendToSap(String organizeCode) {
try {
MesConfig sendToSap = mesConfigService.getCfgValueByCode(organizeCode, "LAST_SEND_TO_SAP_TIME");
String lastSendToSapTime = null;
if (Objects.isNull(sendToSap) || StringUtils.isEmpty(sendToSap.getCfgValue())) {
lastSendToSapTime = TimeTool.pareDateToString(new Date(0));
} else {
lastSendToSapTime = sendToSap.getCfgValue();
sendToSap.setCfgValue(TimeTool.pareDateToString(DateUtil.addMinutes(new Date(), -10)));
mesConfigService.update(sendToSap, "");
}
//查询汇总工单数量
List<MesWorkOrderModel> mesWorkOrderList = mesWorkOrderService.sumMesWorkOrderQtyToSap(organizeCode);
List<MesWorkOrderModel> mesWorkOrderList = mesWorkOrderService.sumMesWorkOrderQtyToSap(organizeCode,lastSendToSapTime);
if (!CollectionUtils.isEmpty(mesWorkOrderList)){
mesWorkOrderToSapService.doMesWorkOrder(organizeCode,mesWorkOrderList);
mesWorkOrderToSapService.doMesWorkOrder(organizeCode,"",mesWorkOrderList);
}
return ResultBean.success("操作成功")
.setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());

@ -1,9 +1,19 @@
package cn.estsh.i3plus.ext.mes.apiservice.controller.busi;
import cn.estsh.i3plus.ext.mes.api.busi.IMesSpotCheckOrderService;
import cn.estsh.i3plus.ext.mes.apiservice.controller.base.BaseMesController;
import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesSpotCheckOrder;
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 cn.estsh.impp.framework.boot.util.ValidatorBean;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@ -13,4 +23,29 @@ import org.springframework.web.bind.annotation.RestController;
@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesSpotCheckOrder")
public class MesSpotCheckOrderController extends BaseMesController<MesSpotCheckOrder> {
@Autowired
private IMesSpotCheckOrderService mesSpotCheckOrderService;
@PostMapping(value = "/qc-print")
@ApiOperation(value = "点检单结果打印")
public ResultBean queryMesSpotCheckOrderResultPrint(@RequestBody MesSpotCheckOrder mesSpotCheckOrder) {
try {
if (mesSpotCheckOrder == null) {
return ResultBean.success();
}
//条件验证
ValidatorBean.beginValid(mesSpotCheckOrder)
.notNull("spotCheckId", mesSpotCheckOrder.getSpotCheckId())
.notNull("spotCheckOrderNo", mesSpotCheckOrder.getSpotCheckOrderNo())
.notNull("organizeCode", mesSpotCheckOrder.getOrganizeCode());
return ResultBean.success("点检单结果打印成功")
.setResultObject(mesSpotCheckOrderService.queryMesSpotCheckOrderResultPrint(mesSpotCheckOrder))
.setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
} catch (ImppBusiException imppException) {
return ResultBean.fail(imppException);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
}

@ -3,6 +3,7 @@ package cn.estsh.i3plus.ext.mes.apiservice.controller.busi;
import cn.estsh.i3plus.ext.mes.api.base.*;
import cn.estsh.i3plus.ext.mes.api.busi.IMaximoService;
import cn.estsh.i3plus.ext.mes.pojo.model.MaximoParamModel;
import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.platform.common.tool.TimeTool;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
@ -191,8 +192,8 @@ public class MesWhiteListController extends MesBaseController {
qmsScrapService.doQmsScrapByPartInspection(mesPartInspectionList,organizeCode);
for (MesPartInspection mesPartInspection : mesPartInspectionList) {
mesPartInspection.setSystemSyncStatus(1);
mesPartInspection.setSystemSyncDatetime(TimeTool.getNowTime(true));
mesPartInspection.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
ConvertBean.serviceModelUpdate(mesPartInspection, MesExtConstWords.JOB);
}
partInspectionRepository.saveAll(mesPartInspectionList);
}

@ -1,9 +1,13 @@
package cn.estsh.i3plus.ext.mes.apiservice.controller.report;
import cn.estsh.i3plus.ext.mes.api.base.IMesProductionRecordService;
import cn.estsh.i3plus.ext.mes.api.busi.report.IMesYfReportService;
import cn.estsh.i3plus.ext.mes.apiservice.config.AuthUtilExt;
import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord;
import cn.estsh.i3plus.pojo.mes.model.MesProductionRecordModel;
import cn.estsh.impp.framework.base.controller.MesBaseController;
import cn.estsh.impp.framework.boot.exception.ImppBusiException;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
@ -31,6 +35,9 @@ public class MesBusiReportController extends MesBaseController {
@Autowired
private IMesYfReportService mesYfReportService;
@Autowired
private IMesProductionRecordService mesProductionRecordService;
@ApiOperation(value = "查询追溯报表", notes = "查询追溯报表")
@GetMapping("/traceability/find")
public ResultBean findTraceabilityReport(MesProduceSn mesProduceSn) {
@ -45,4 +52,47 @@ public class MesBusiReportController extends MesBaseController {
}
}
@ApiOperation(value = "零件条码状态查询", notes = "零件条码状态查询")
@GetMapping("/mesProduceSn/query")
public ResultBean queryMesProduceSn(MesProduceSn mesProduceSn, Pager pager) {
try {
return ResultBean.success("查询成功").setListPager(mesYfReportService.queryMesProduceSn(mesProduceSn,pager));
} catch (ImppBusiException e) {
return ResultBean.fail(e);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
@ApiOperation(value = "产品加工记录", notes = "产品加工记录")
@GetMapping("/mesProductionRecord/query")
public ResultBean queryMesProductionRecord(MesProductionRecord mesProductionRecord, Pager pager) {
try {
return ResultBean.success("查询成功").setListPager(mesYfReportService.queryMesProductionRecord(mesProductionRecord,pager));
} catch (ImppBusiException e) {
return ResultBean.fail(e);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
@ApiOperation(value = "线边库存报表", notes = "线边库存报表")
@GetMapping("/mesProductionOffLine/query")
public ResultBean queryMesProductionOffLine(MesProductionRecordModel mesProductionRecordModel, Pager pager) {
try {
ValidatorBean.beginValid(mesProductionRecordModel)
.notNull("partNo", mesProductionRecordModel.getPartNo())
.notNull("organizeCode", mesProductionRecordModel.getOrganizeCode())
.notNull("onLineWorkCellCode",mesProductionRecordModel.getOnLineWorkCellCode())
.notNull("offLineWorkCellCode",mesProductionRecordModel.getOffLineWorkCellCode())
.notNull("createDateTimeStart",mesProductionRecordModel.getCreateDateTimeStart())
.notNull("createDateTimeEnd",mesProductionRecordModel.getCreateDateTimeEnd());
return ResultBean.success("查询成功").setListPager(mesProductionRecordService.queryMesProductionOffLine(mesProductionRecordModel,pager));
} catch (ImppBusiException e) {
return ResultBean.fail(e);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
}

@ -9,4 +9,6 @@ public interface IMesProdRuleNosortCfgDao {
List<MesProdRuleNosortCfg> findMesProdRuleNosortCfgByWorkCenterCode(String workCenterCode, String partNo, String organizeCode);
List<MesProdRuleNosortCfg> findMesProdRuleNosortCfgByWorkCellCode(String workCellCode, String partNo, String organizeCode);
}

@ -1,8 +1,10 @@
package cn.estsh.i3plus.ext.mes.apiservice.dao;
import cn.estsh.i3plus.ext.mes.pojo.model.MesShippingOrderManagementDetailModel;
import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail;
import io.swagger.annotations.ApiOperation;
import java.util.List;
@ -18,4 +20,8 @@ public interface IMesShippingOrderManagementDetailDao {
int queryOrderDetailGroupByPartCount(MesShippingOrderManagementDetail detail);
List<MesShippingOrderManagementDetailModel> queryOrderDetailGroupByPartInfo(MesShippingOrderManagementDetail detail, Pager pager);
@ApiOperation("查询发运单明细")
ListPager<MesShippingOrderManagementDetailModel> queryMesShippingDetailsByPager(MesShippingOrderManagementDetailModel mesShippingOrderManagementDetailModel, Pager pager);
}

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

@ -4,6 +4,7 @@ import cn.estsh.i3plus.ext.mes.pojo.model.board.MesWorkCenterBoardResultModel;
import cn.estsh.i3plus.pojo.mes.bean.MesShift;
import java.util.List;
import java.util.Set;
/**
* @Description : -
@ -39,8 +40,9 @@ public interface IMesYfBoardDao {
* @param organizeCode
* @param startTime
* @param endTime
* @param workOrderNoSet
* @return
*/
List<MesWorkCenterBoardResultModel> queryCompletedSnInfo(String workCenterCode, String organizeCode, String startTime, String endTime);
List<MesWorkCenterBoardResultModel> queryCompletedSnInfo(String workCenterCode, String organizeCode, String startTime, String endTime, Set<String> workOrderNoSet);
}

@ -20,7 +20,7 @@ import java.util.List;
@Service
@Slf4j
public class MesDaoImpl implements IMesBomDao {
public class MesBomDaoImpl implements IMesBomDao {
@Autowired
private EntityManager entityManager;

@ -37,12 +37,12 @@ public class MesLoadingListDetailDaoImpl implements IMesLoadingListDetailDao {
StringBuffer hql = new StringBuffer("select mll.order_code ,mll.cust_name ,mll.cust_organize_name ,mll.shipping_group_name , ");
hql.append(" mll.status , mll.truck_no ,mll.weather , ms.shipping_code ,ms.start_scan_time ,ms.end_scan_time ,mlld.status as shipStatus , ");
hql.append(" mlld.create_date_time , mll.create_user ,mll.modify_date_time , ms.modify_user , ");
hql.append(" mll.cust_code , mll.cust_organize_code ,mll.shipping_group_code ");
hql.append(" mll.cust_code , mll.cust_organize_code ,mll.shipping_group_code,mlld.remark ");
hql.append(" from mes_loading_list as mll");
hql.append(" inner join mes_loading_list_detail as mlld on mll.id = mlld.pid");
hql.append(" and mll.organize_code = mlld.organize_code and mll.is_deleted = mlld.is_deleted and mll.is_valid = mlld.is_valid ");
hql.append(" inner join mes_shipping as ms on mlld.shipping_id = ms.id ");
hql.append(" and mlld.organize_code = ms.organize_code and mlld.is_deleted = ms.is_deleted and mlld.is_valid = ms.is_valid ");
hql.append(" left join mes_shipping as ms on mlld.shipping_code = ms.shipping_code ");
hql.append(" and ((mlld.organize_code = ms.organize_code and mlld.is_deleted = ms.is_deleted and mlld.is_valid = ms.is_valid) or (ms.id is null)) ");
hql.append(" where mll.organize_code = :organizeCode ");
hql.append(" and mll.is_deleted = :isDeleted ");
hql.append(" and mll.is_valid = :isValid ");
@ -94,6 +94,7 @@ public class MesLoadingListDetailDaoImpl implements IMesLoadingListDetailDao {
model.setCustCode(StringUtils.isEmpty(cells[15]) ? "" : String.valueOf(cells[15]));
model.setCustOrganizeCode(StringUtils.isEmpty(cells[16]) ? "" : String.valueOf(cells[16]));
model.setShippingGroupCode(StringUtils.isEmpty(cells[17]) ? "" : String.valueOf(cells[17]));
model.setRemark(StringUtils.isEmpty(cells[18]) ? "" : String.valueOf(cells[18]));
modelList.add(model);
}
@ -108,8 +109,8 @@ public class MesLoadingListDetailDaoImpl implements IMesLoadingListDetailDao {
hql.append(" from mes_loading_list as mll");
hql.append(" inner join mes_loading_list_detail as mlld on mll.id = mlld.pid");
hql.append(" and mll.organize_code = mlld.organize_code and mll.is_deleted = mlld.is_deleted and mll.is_valid = mlld.is_valid ");
hql.append(" inner join mes_shipping as ms on mlld.shipping_id = ms.id ");
hql.append(" and mlld.organize_code = ms.organize_code and mlld.is_deleted = ms.is_deleted and mlld.is_valid = ms.is_valid ");
hql.append(" left join mes_shipping as ms on mlld.shipping_code = ms.shipping_code ");
hql.append(" and ((mlld.organize_code = ms.organize_code and mlld.is_deleted = ms.is_deleted and mlld.is_valid = ms.is_valid) or (ms.id is null)) ");
hql.append(" where mll.organize_code = :organizeCode ");
hql.append(" and mll.is_deleted = :isDeleted ");
hql.append(" and mll.is_valid = :isValid ");

@ -35,4 +35,22 @@ public class MesProdRuleNosortCfgDaoImpl implements IMesProdRuleNosortCfgDao {
return query.getResultList();
}
@Override
public List<MesProdRuleNosortCfg> findMesProdRuleNosortCfgByWorkCellCode(String workCellCode, 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.workCellCode = :workCellCode and ns.inPartNo = :inPartNo order by ns.createDatetime desc");
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("workCellCode", workCellCode);
query.setParameter("inPartNo", partNo);
return query.getResultList();
}
}

@ -2,9 +2,13 @@ package cn.estsh.i3plus.ext.mes.apiservice.daoimpl;
import cn.estsh.i3plus.ext.mes.apiservice.dao.IMesShippingOrderManagementDetailDao;
import cn.estsh.i3plus.ext.mes.pojo.model.MesShippingOrderManagementDetailModel;
import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.base.common.PagerHelper;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -15,6 +19,7 @@ import javax.persistence.EntityManager;
import javax.persistence.Query;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
/**
* @Description :SAP
@ -98,4 +103,88 @@ public class MesShippingOrderManagementDetailDaoImpl implements IMesShippingOrde
return modelList;
}
@Override
public ListPager<MesShippingOrderManagementDetailModel> queryMesShippingDetailsByPager(MesShippingOrderManagementDetailModel mesShippingOrderManagementDetailModel, Pager pager) {
StringBuilder dataHql = new StringBuilder();
dataHql.append(" select new ").append(MesShippingOrderManagementDetailModel.class.getName()).append("(m,d)");
//共用HQL
String commonHql = getCommonHql(mesShippingOrderManagementDetailModel);
//行数
Query countQuery = entityManager.createQuery("select count(1) " + commonHql);
setParameter(mesShippingOrderManagementDetailModel, countQuery);
//数据
Query dataQuery = entityManager.createQuery(dataHql.append(commonHql).append(getOrderBy(mesShippingOrderManagementDetailModel)).toString(), MesShippingOrderManagementDetailModel.class);
setParameter(mesShippingOrderManagementDetailModel, dataQuery);
if (Objects.isNull(pager)) return new ListPager<>(dataQuery.getResultList(), pager);
int count = Integer.parseInt(String.valueOf(countQuery.getSingleResult()));
if (count <= 0) return new ListPager<>(new ArrayList<>(), pager);
pager = PagerHelper.getPager(pager, count);
dataQuery.setFirstResult(pager.getStartRow()).setMaxResults(pager.getPageSize());
return new ListPager<>(dataQuery.getResultList(), pager);
}
private void setParameter(MesShippingOrderManagementDetailModel mesShippingOrderManagementDetailModel, Query query) {
query.setParameter("isValid", CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
query.setParameter("isDeleted", CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
query.setParameter("organizeCode", mesShippingOrderManagementDetailModel.getOrganizeCode());
query.setParameter("status", MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.SHIPPINGED.getValue());
if (!StringUtils.isEmpty(mesShippingOrderManagementDetailModel.getShippingType()))
query.setParameter("shippingType", mesShippingOrderManagementDetailModel.getShippingType());
if (!StringUtils.isEmpty(mesShippingOrderManagementDetailModel.getStartScanTimeStart()))
query.setParameter("startScanTimeStart", mesShippingOrderManagementDetailModel.getStartScanTimeStart());
if (!StringUtils.isEmpty(mesShippingOrderManagementDetailModel.getStartScanTimeEnd()))
query.setParameter("startScanTimeEnd", mesShippingOrderManagementDetailModel.getStartScanTimeEnd());
if (!StringUtils.isEmpty(mesShippingOrderManagementDetailModel.getEndScanTimeStart()))
query.setParameter("endScanTimeStart", mesShippingOrderManagementDetailModel.getEndScanTimeStart());
if (!StringUtils.isEmpty(mesShippingOrderManagementDetailModel.getEndScanTimeEnd()))
query.setParameter("endScanTimeEnd", mesShippingOrderManagementDetailModel.getEndScanTimeEnd());
if (!StringUtils.isEmpty(mesShippingOrderManagementDetailModel.getPublishTimeStart()))
query.setParameter("publishTimeStart", mesShippingOrderManagementDetailModel.getPublishTimeStart());
if (!StringUtils.isEmpty(mesShippingOrderManagementDetailModel.getPublishTimeEnd()))
query.setParameter("publishTimeEnd", mesShippingOrderManagementDetailModel.getPublishTimeEnd());
}
private String getOrderBy(MesShippingOrderManagementDetailModel mesShippingOrderManagementDetailModel) {
StringBuilder orderBy = new StringBuilder();
if (StringUtils.isEmpty(mesShippingOrderManagementDetailModel.getOrderByParam()) || StringUtils.isEmpty(mesShippingOrderManagementDetailModel.getAscOrDesc())) {
mesShippingOrderManagementDetailModel.setOrderByParam("createDatetime");
mesShippingOrderManagementDetailModel.setAscOrDesc(CommonEnumUtil.ASC_OR_DESC.DESC.getValue());
}
return orderBy.append(" order by d.").append(mesShippingOrderManagementDetailModel.getOrderByParam()).append(" ").append(CommonEnumUtil.ASC_OR_DESC.DESC.getValue() == mesShippingOrderManagementDetailModel.getAscOrDesc() ? "desc" : "asc").toString();
}
private String getCommonHql(MesShippingOrderManagementDetailModel mesShippingOrderManagementDetailModel) {
StringBuilder commonHql = new StringBuilder();
commonHql.append(" from MesShippingOrderManagement m left join MesShippingOrderManagementDetail d on m.id = d.pid");
commonHql.append(" where m.isDeleted=:isDeleted and m.isValid = :isValid and m.organizeCode = :organizeCode ");
commonHql.append(" and d.isDeleted=:isDeleted and d.isValid = :isValid and d.organizeCode = :organizeCode ");
commonHql.append(" and d.status = :status ");
if (!StringUtils.isEmpty(mesShippingOrderManagementDetailModel.getShippingCode()))
commonHql.append(" and m.shippingCode like '%").append(mesShippingOrderManagementDetailModel.getShippingCode()).append("%' ");
if (!StringUtils.isEmpty(mesShippingOrderManagementDetailModel.getBarcode()))
commonHql.append(" and d.barcode like '%").append(mesShippingOrderManagementDetailModel.getBarcode()).append("%' ");
if (!StringUtils.isEmpty(mesShippingOrderManagementDetailModel.getPartNo()))
commonHql.append(" and d.partNo like '%").append(mesShippingOrderManagementDetailModel.getPartNo()).append("%' ");
if (!StringUtils.isEmpty(mesShippingOrderManagementDetailModel.getCustPartNo()))
commonHql.append(" and d.custPartNo like '%").append(mesShippingOrderManagementDetailModel.getCustPartNo()).append("%' ");
if (!StringUtils.isEmpty(mesShippingOrderManagementDetailModel.getShippingType()))
commonHql.append(" and m.shippingType = :shippingType ");
if (!StringUtils.isEmpty(mesShippingOrderManagementDetailModel.getCustCode()))
commonHql.append(" and m.custCode like '%").append(mesShippingOrderManagementDetailModel.getCustCode()).append("%' ");
if (!StringUtils.isEmpty(mesShippingOrderManagementDetailModel.getStartScanTimeStart()))
commonHql.append(" and m.startScanTime >= :startScanTimeStart ");
if (!StringUtils.isEmpty(mesShippingOrderManagementDetailModel.getStartScanTimeEnd()))
commonHql.append(" and m.startScanTime <= :startScanTimeEnd ");
if (!StringUtils.isEmpty(mesShippingOrderManagementDetailModel.getEndScanTimeStart()))
commonHql.append(" and m.endScanTime >= :endScanTimeStart ");
if (!StringUtils.isEmpty(mesShippingOrderManagementDetailModel.getEndScanTimeEnd()))
commonHql.append(" and m.endScanTime <= :endScanTimeEnd ");
if (!StringUtils.isEmpty(mesShippingOrderManagementDetailModel.getPublishTimeStart()))
commonHql.append(" and m.publishTime >= :publishTimeStart ");
if (!StringUtils.isEmpty(mesShippingOrderManagementDetailModel.getPublishTimeEnd()))
commonHql.append(" and m.publishTime <= :publishTimeEnd ");
return commonHql.toString();
}
}

@ -1,14 +1,19 @@
package cn.estsh.i3plus.ext.mes.apiservice.daoimpl;
import cn.estsh.i3plus.ext.mes.apiservice.dao.IMesWorkOrderDao;
import cn.estsh.i3plus.ext.mes.apiservice.utils.BeanUtil;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.mes.model.MesWorkOrderModel;
import lombok.extern.slf4j.Slf4j;
import org.hibernate.SQLQuery;
import org.hibernate.transform.Transformers;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
/**
@ -26,15 +31,30 @@ public class MesWorkOrderDaoImpl implements IMesWorkOrderDao {
private EntityManager entityManager;
@Override
public List<MesWorkOrderModel> sumMesWorkOrderQtyToSap(String organizeCode, List<Integer> statusList) {
StringBuffer hql = new StringBuffer("select new " + MesWorkOrderModel.class.getName() + "(partNo,planStartTime,productVersion,sum(case when workOrderStatus = 40 then 0 else qty end) as sumQty) " +
" from MesWorkOrder where isDeleted=:isDeleted and isValid = :isValid and organizeCode = :organizeCode " +
"and workOrderStatus not in(:statusList) group by partNo,planStartTime,productVersion");
Query query = entityManager.createQuery(hql.toString(), MesWorkOrderModel.class);
public List<MesWorkOrderModel> sumMesWorkOrderQtyToSap(String organizeCode, List<Integer> statusList,List<String> partNoList) {
StringBuffer hql = new StringBuffer("select organize_Code as organizeCode,part_No as partNo, date_format(plan_start_time, '%Y-%m-%d' ) as planStartTime, product_Version as productVersion, " +
" sum( CASE WHEN work_Order_Status = 40 THEN complete_Qty ELSE qty END ) AS qty " +
" from Mes_Work_Order where is_Deleted=:isDeleted and is_Valid = :isValid and organize_Code = :organizeCode " +
" and work_order_type = 20 and order_flag !='P' and part_no in (:partNoList) "+
" and work_Order_Status not in(:statusList) group by organize_code,part_No, date_format(plan_start_time, '%Y-%m-%d' ), product_Version ");
Query query = entityManager.createNativeQuery(hql.toString());
query.setParameter("organizeCode", organizeCode);
query.setParameter("isValid", CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
query.setParameter("isDeleted", CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
query.setParameter("statusList", statusList);
return query.getResultList();
query.setParameter("partNoList", partNoList);
query.unwrap(SQLQuery.class).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
List<HashMap<String, Object>> hashMaps = query.getResultList();
List<MesWorkOrderModel> mesWorkOrderList =new ArrayList<>();
for (HashMap<String, Object> hashMap : hashMaps) {
try {
mesWorkOrderList.add((MesWorkOrderModel) BeanUtil.populateBean(hashMap, MesWorkOrderModel.class));
} catch (Exception e) {
e.printStackTrace();
}
}
return mesWorkOrderList;
}
}

@ -12,6 +12,7 @@ import org.springframework.util.CollectionUtils;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
/**
@ -71,12 +72,14 @@ public class MesYfBoardDaoImpl implements IMesYfBoardDao {
}
@Override
public List<MesWorkCenterBoardResultModel> queryCompletedSnInfo(String workCenterCode, String organizeCode, String startTime, String endTime) {
//先查询生产加工表中指定时间区间、指定产线已加工完成的数据
public List<MesWorkCenterBoardResultModel> queryCompletedSnInfo(String workCenterCode, String organizeCode, String startTime, String endTime, Set<String> workOrderNoSet) {
//先查询生产加工表中指定时间区间、指定产线(指定工单)已加工完成的数据(过程条码,创建时间、工单号,物料号)
StringBuffer queryMesProductionRecordSql = new StringBuffer();
queryMesProductionRecordSql.append("select distinct new " + MesWorkCenterBoardResultModel.class.getName() +
queryMesProductionRecordSql.append("select new " + MesWorkCenterBoardResultModel.class.getName() +
"(serialNumber, " +
"createDatetime) " +
"createDatetime, " +
"workOrderNo, " +
"partNo) " +
"from MesProductionRecord " +
"where isValid = :isValid " +
"and isDeleted = :isDeleted " +
@ -85,6 +88,9 @@ public class MesYfBoardDaoImpl implements IMesYfBoardDao {
"and isComplete = :isComplete " +
"and createDatetime >= :startTime " +
"and createDatetime <= :endTime ");
if (!CollectionUtils.isEmpty(workOrderNoSet)) {
queryMesProductionRecordSql.append("and workOrderNo in (:workOrderNoSet) ");
}
Query mesProductionRecordQuery = entityManager.createQuery(queryMesProductionRecordSql.toString(), MesWorkCenterBoardResultModel.class);
mesProductionRecordQuery.setParameter("isValid", CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
mesProductionRecordQuery.setParameter("isDeleted", CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
@ -93,13 +99,17 @@ public class MesYfBoardDaoImpl implements IMesYfBoardDao {
mesProductionRecordQuery.setParameter("isComplete", CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
mesProductionRecordQuery.setParameter("startTime", startTime);
mesProductionRecordQuery.setParameter("endTime", endTime);
if (!CollectionUtils.isEmpty(workOrderNoSet)) {
mesProductionRecordQuery.setParameter("workOrderNoSet", workOrderNoSet);
}
List<MesWorkCenterBoardResultModel> productionRecordQueryResultList = mesProductionRecordQuery.getResultList();
if (!CollectionUtils.isEmpty(productionRecordQueryResultList)) {
//取出所有过程条码
List<String> serialNumberList = productionRecordQueryResultList.
stream().map(MesWorkCenterBoardResultModel::getSerialNumber).collect(Collectors.toList());
//查询合格的过程条码与对应的物料号 拼接后的结果
StringBuffer queryMesProduceSnSql = new StringBuffer();
queryMesProduceSnSql.append("select distinct serialNumber " +
queryMesProduceSnSql.append("select CONCAT(serial_number,part_no) " +
"from MesProduceSn " +
"where isValid = :isValid " +
"and isDeleted = :isDeleted " +
@ -114,7 +124,7 @@ public class MesYfBoardDaoImpl implements IMesYfBoardDao {
mesProduceSnQuery.setParameter("serialNumberList", serialNumberList);
List<String> resultList = mesProduceSnQuery.getResultList();
for (MesWorkCenterBoardResultModel resultModel : productionRecordQueryResultList) {
if (resultList.contains(resultModel.getSerialNumber())) {
if (!CollectionUtils.isEmpty(resultList) && resultList.contains(resultModel.getSerialNumber() + resultModel.getPartNo())) {
resultModel.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue());
}else {
resultModel.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.SUSPICIOUS.getValue());

@ -119,6 +119,7 @@ public class WmsSAPDbQuery {
* @throws Exception
*/
public String partName(String organizeCode, String partNo) throws Exception {
if(StringUtil.isEmpty(partNo) || StringUtil.isEmpty(organizeCode)) return "";
String sqlString = "select part_name from mes_part where organize_code='" + organizeCode
+ "' and part_no='" + partNo + "'";
@ -138,9 +139,12 @@ public class WmsSAPDbQuery {
* @throws Exception
*/
public String getColumnDateBySql(String sql, String params, String column) throws Exception {
if(StringUtil.isEmpty(sql)) return "";
String[] split = null;
if (!StringUtil.isEmpty(params)) {
split = params.split(",");
}else{
if(sql.contains("?")) return "";
}
List<Map<String, Object>> result = mesDataSourceProxy.queryMapList(srcConn, sql, split);
if (CollectionUtils.isNotEmpty(result)) {

@ -1,5 +1,6 @@
package cn.estsh.i3plus.ext.mes.apiservice.dbinterface;
import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords;
import cn.estsh.i3plus.mes.apiservice.serviceimpl.engine.script.EngineScriptManager;
import cn.estsh.i3plus.mes.apiservice.util.datatable.DataRow;
import cn.estsh.i3plus.mes.apiservice.util.datatable.DataSet;
@ -8,17 +9,16 @@ import cn.estsh.i3plus.platform.plugin.datasource.DynamicDataSourceProxy;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.util.StringUtil;
import cn.estsh.i3plus.pojo.wms.dbinterface.UpdateSyncItem;
import cn.estsh.i3plus.pojo.wms.dbinterface.WmsInterfaceEnumUtil;
import cn.estsh.impp.framework.boot.util.ImppRedis;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.apache.commons.lang.exception.ExceptionUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.sql.Connection;
@ -85,29 +85,15 @@ public class WmsSAPDbWriter extends WmsSAPDbSyncBase {
saveDestData(destDataSet);
}
} catch (Exception e) {
//记录sap过来的数据 超过一定的请求次数放弃数据
if (WmsInterfaceEnumUtil.DIRECTION_TYPE.SAP2WMS.getName().equals(this.dataMapper.getGroupName())) {
if (!CollectionUtils.isEmpty(srcDataList)) {
String key = this.dataMapper.getSoftAdaptorCode() + ":" + srcDataList.get(0).get("SID");
if (redisMes.hasKey(key)) {
int reqCount = Integer.parseInt(String.valueOf(redisMes.getObject(key)));
if (reqCount + 1 > REQ_COUNT) {
LOGGER.info(ExceptionUtils.getStackTrace(e));
return;
} finally {
//同步失败,更新同步状态为同步失败
if (this.dataMapper.getUseScriptMark() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) {
callScriptMark(srcDataList, originDataList);
} else {
callSqlMark(srcDataList, originDataList);
callSqlMark(srcDataList, originDataList, false);
}
LOGGER.error("超过请求次数放弃数据 WmsSAPDbWriter.saveData SoftAdaptorCode:{}, SID:{}", this.dataMapper.getSoftAdaptorCode(), srcDataList.get(0).get("SID"));
return;
} else {
redisMes.incr(key, 1);
}
} else {
redisMes.incr(key, 1);
}
}
}
throw e;
}
// 再更新来源数据的同步标志
@ -115,7 +101,7 @@ public class WmsSAPDbWriter extends WmsSAPDbSyncBase {
if (this.dataMapper.getUseScriptMark() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) {
callScriptMark(srcDataList, originDataList);
} else {
callSqlMark(srcDataList, originDataList);
callSqlMark(srcDataList, originDataList,true);
}
}
@ -125,12 +111,12 @@ public class WmsSAPDbWriter extends WmsSAPDbSyncBase {
* @param originDataList
* @throws Exception
*/
private void callSqlMark(List<Map<String, Object>> srcDataList, List<Map<String, Object>> originDataList)
private void callSqlMark(List<Map<String, Object>> srcDataList, List<Map<String, Object>> originDataList,boolean isSuccess)
throws Exception {
if (originDataList != null) {
saveSrcData(originDataList);
saveSrcData(originDataList,isSuccess);
} else {
saveSrcData(srcDataList);
saveSrcData(srcDataList,isSuccess);
}
}
@ -243,7 +229,7 @@ public class WmsSAPDbWriter extends WmsSAPDbSyncBase {
* @param srcDataList
* @throws Exception
*/
private void saveSrcData(List<Map<String, Object>> srcDataList) throws Exception {
private void saveSrcData(List<Map<String, Object>> srcDataList,boolean isSuccess) throws Exception {
if (srcDataList == null || srcDataList.size() == 0) {
LOGGER.error("no data in src datalist!");
throw new IllegalArgumentException("no data in src datalist!");
@ -275,7 +261,7 @@ public class WmsSAPDbWriter extends WmsSAPDbSyncBase {
}
// 把来源表的数据行放到表达式中,确保表达式可以引用
HashMap<String, Object> updateValueMap = getUpdateSyncMap(srcRow);
HashMap<String, Object> updateValueMap = getUpdateSyncMap(srcRow,isSuccess);
// 存在来源表不需要更新同步标志的情况
if (updateValueMap.size() > 0) {
// 拼接更新来源表同步标志的 SQL LIST
@ -345,7 +331,7 @@ public class WmsSAPDbWriter extends WmsSAPDbSyncBase {
*
* @return
*/
private HashMap<String, Object> getUpdateSyncMap(Map<String, Object> srcRow) throws Exception {
private HashMap<String, Object> getUpdateSyncMap(Map<String, Object> srcRow,boolean isSuccess) throws Exception {
HashMap<String, Object> updateSyncMap = new HashMap<>();
if (this.getSrcUpdateSync() == null) {
@ -354,9 +340,12 @@ public class WmsSAPDbWriter extends WmsSAPDbSyncBase {
for (UpdateSyncItem item : this.getSrcUpdateSync()) {
Object updateValue = item.getUpdateValue();
if(!StringUtils.isEmpty(item.getUpdateValue()) && item.getUpdateValue().contains(MesExtConstWords.COLON)){
updateValue = isSuccess ? item.getUpdateValue().split(MesExtConstWords.COLON)[0]:item.getUpdateValue().split(MesExtConstWords.COLON)[1];
}
// 如果包含表达式,则计算后赋值
if (item.getUpdateValue().indexOf("#") != -1) {
if (item.getUpdateValue().contains("#")) {
updateValue = wmsSAPDbExpression.parse(item.getUpdateValue(), srcRow);
}

@ -1,7 +1,9 @@
package cn.estsh.i3plus.ext.mes.apiservice.schedulejob;
import cn.estsh.i3plus.ext.mes.api.base.IMesQmsScrapService;
import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords;
import cn.estsh.i3plus.mes.apiservice.schedulejob.BaseMesScheduleJob;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.platform.common.tool.TimeTool;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
@ -82,8 +84,8 @@ public class MesQmsScrapJob extends BaseMesScheduleJob {
qmsScrapService.doQmsScrapByPartInspection(mesPartInspectionList, organizeCode);
for (MesPartInspection mesPartInspection : mesPartInspectionList) {
mesPartInspection.setSystemSyncStatus(1);
mesPartInspection.setSystemSyncDatetime(TimeTool.getNowTime(true));
mesPartInspection.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
ConvertBean.serviceModelUpdate(mesPartInspection, MesExtConstWords.JOB);
}
partInspectionRepository.saveAll(mesPartInspectionList);
}

@ -1,7 +1,9 @@
package cn.estsh.i3plus.ext.mes.apiservice.schedulejob;
import cn.estsh.i3plus.ext.mes.api.base.IMesQmsSuspiciousService;
import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords;
import cn.estsh.i3plus.mes.apiservice.schedulejob.BaseMesScheduleJob;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.platform.common.tool.TimeTool;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
@ -89,20 +91,29 @@ public class MesQmsSuspiciousJob extends BaseMesScheduleJob {
if (!CollectionUtils.isEmpty(mesPartInspectionList)) {
//过滤掉已经汇总的
List<MesPartInspection> partInspectionList = new ArrayList<>();
//排序取未同步的一条最早的
Map<String, List<MesPartInspection>> partMap = mesPartInspectionList.stream().collect(Collectors.groupingBy(p -> p.getSn() + "-" + p.getPartNo()));
for (Map.Entry<String, List<MesPartInspection>> stringListEntry : partMap.entrySet()) {
//排序取单件逻辑未同步的一条最新的
Map<String, List<MesPartInspection>> partSnMap = mesPartInspectionList.stream()
.filter(p -> p.getSourceType() == 10)
.collect(Collectors.groupingBy(p -> p.getSn() + "-" + p.getPartNo()));
for (Map.Entry<String, List<MesPartInspection>> stringListEntry : partSnMap.entrySet()) {
List<MesPartInspection> value = stringListEntry.getValue();
MesPartInspection next = value.stream().sorted(Comparator.comparing(MesPartInspection::getCreateDatetime).reversed()).iterator().next();
partInspectionList.add(next);
}
//批次逻辑的全部汇总数量 42692 MES:可疑品汇总逻辑更新
Map<String, List<MesPartInspection>> partMap = mesPartInspectionList.stream()
.filter(p -> p.getSourceType() == 20)
.collect(Collectors.groupingBy(MesPartInspection::getPartNo));
for (Map.Entry<String, List<MesPartInspection>> stringListEntry : partMap.entrySet()) {
partInspectionList.addAll(stringListEntry.getValue());
}
LOGGER.info("MES可疑品汇总 ----- partInspectionList{}", partInspectionList.size());
qmsSuspiciousService.doQmsSuspiciousByPartInspection(partInspectionList, organizeCode);
for (MesPartInspection mesPartInspection : mesPartInspectionList) {
mesPartInspection.setQmsSync(1);
mesPartInspection.setSystemSyncDatetime(TimeTool.getNowTime(true));
ConvertBean.serviceModelUpdate(mesPartInspection, MesExtConstWords.JOB);
}
partInspectionRepository.saveAll(mesPartInspectionList);
}

@ -1,8 +1,12 @@
package cn.estsh.i3plus.ext.mes.apiservice.schedulejob;
import cn.estsh.i3plus.ext.mes.api.base.IMesConfigService;
import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderService;
import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderToSapService;
import cn.estsh.i3plus.mes.apiservice.schedulejob.BaseMesScheduleJob;
import cn.estsh.i3plus.mes.apiservice.util.DateUtil;
import cn.estsh.i3plus.platform.common.tool.TimeTool;
import cn.estsh.i3plus.pojo.mes.bean.MesConfig;
import cn.estsh.i3plus.pojo.mes.model.MesWorkOrderModel;
import cn.estsh.impp.framework.boot.init.ApplicationProperties;
import io.swagger.annotations.ApiOperation;
@ -15,7 +19,9 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.util.CollectionUtils;
import java.util.Date;
import java.util.List;
import java.util.Objects;
/**
* @Description : SAP
@ -39,6 +45,9 @@ public class MesWorkOrderToSapJob extends BaseMesScheduleJob {
@Autowired
private IMesWorkOrderToSapService mesWorkOrderToSapService;
@Autowired
private IMesConfigService mesConfigService;
@Value("${server.port}")
private String serverPort;
@Value("${impp.server.ip}")
@ -59,11 +68,21 @@ public class MesWorkOrderToSapJob extends BaseMesScheduleJob {
}
String[] organizeCodeList = jobParam.split(",");
LOGGER.info("汇总工单给SAP开始 -----start");
String userName = "job";
for (String organizeCode : organizeCodeList) {
List<MesWorkOrderModel> mesWorkOrderList = mesWorkOrderService.sumMesWorkOrderQtyToSap(organizeCode);
MesConfig sendToSap = mesConfigService.getCfgValueByCode(organizeCode,"LAST_SEND_TO_SAP_TIME");
String lastSendToSapTime = null;
if(Objects.isNull(sendToSap) || StringUtils.isEmpty(sendToSap.getCfgValue())){
lastSendToSapTime = TimeTool.pareDateToString(new Date(0));
}else{
lastSendToSapTime = sendToSap.getCfgValue();
sendToSap.setCfgValue(TimeTool.pareDateToString(DateUtil.addMinutes(new Date(), -10)));
mesConfigService.update(sendToSap,userName);
}
List<MesWorkOrderModel> mesWorkOrderList = mesWorkOrderService.sumMesWorkOrderQtyToSap(organizeCode,lastSendToSapTime);
if (!CollectionUtils.isEmpty(mesWorkOrderList)) {
mesWorkOrderToSapService.doMesWorkOrder(organizeCode, mesWorkOrderList);
mesWorkOrderToSapService.doMesWorkOrder(organizeCode,userName, mesWorkOrderList);
}
}
LOGGER.info("汇总工单给SAP开始结束 ----- end");

@ -2,17 +2,25 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base;
import cn.estsh.i3plus.ext.mes.api.base.IMesBtoJobService;
import cn.estsh.i3plus.ext.mes.api.base.strategy.IRoundnessStrategy;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.platform.common.tool.TimeTool;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesCustomerMessagePoint;
import cn.estsh.i3plus.pojo.mes.bean.MesPartProdGroup;
import cn.estsh.i3plus.pojo.mes.bean.MesPartProdGroupDetail;
import cn.estsh.i3plus.pojo.mes.bean.MesPartProdGroupWindowTime;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesCustSortInfo;
import cn.estsh.i3plus.pojo.mes.repository.MesPartProdGroupWindowTimeRepository;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import cn.estsh.impp.framework.boot.util.SpringContextsUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
/**
@ -33,6 +41,10 @@ public class MesBtoJobServiceImpl implements IMesBtoJobService {
@Autowired
private MesCustSoftInfoServiceImpl mesCustSoftInfoService;
@Autowired
private MesPartProdGroupWindowTimeRepository windowTimeRao;
@Override
public void doCreateBto(String organizeCode, List<String> groupCodeList) {
//1. 根据 organizeCode 和 groupCodeList 查询零件生产组
@ -49,12 +61,25 @@ public class MesBtoJobServiceImpl implements IMesBtoJobService {
List<String> custPartNoList = details.stream().map(MesPartProdGroupDetail::getCustPartNo).collect(Collectors.toList());
List<MesCustSortInfo> sortInfoList = mesCustSoftInfoService.queryCustSortInfoList(prodGroup.getCustCode(), prodGroup.getCustOrganizeCode(), prodGroup.getCustInfoPoint(), organizeCode, custPartNoList);
//6. 根据零件生产组的RoundnessType 去做策略,现在只做 窗口时间 策略; 入参
String roundnessService = MesExtEnumUtil.SHIPPING_GROUP_ROUND_METHOD.valueOfService(prodGroup.getRoundMethod());
if (sortInfoList.isEmpty()){
log.info("当前零件生产组:{}没有排序信息",prodGroup.getPartProdGroupName());
//如果圆整方式是按时圆整,且没有排序信息,更新窗口时间
try {
MesPartProdGroupWindowTime time = getWindowTimeByProductGroup(prodGroup.getId(), organizeCode);
if (time != null){
String lastRunTime = TimeTool.getNowTime(true);
log.info("当前零件生产组:{},更新本次执行时间:{},窗口时间为:{}",prodGroup.getPartProdGroupCode(),lastRunTime,time.getWindowTime());
ConvertBean.saveOrUpdate(time, "JOB");
time.setLastRunTime(lastRunTime);
windowTimeRao.update(time);
}
} catch (ParseException e) {
log.info("解析失败:{}",e.getMessage());
}
continue;
}
//6. 根据零件生产组的RoundnessType 去做策略,现在只做 窗口时间 策略; 入参
String roundnessService = MesExtEnumUtil.SHIPPING_GROUP_ROUND_METHOD.valueOfService(prodGroup.getRoundType());
IRoundnessStrategy roundnessStrategy = (IRoundnessStrategy)SpringContextsUtil.getBean(roundnessService);
roundnessStrategy.execute(prodGroup,sortInfoList, details);
}
@ -72,4 +97,50 @@ public class MesBtoJobServiceImpl implements IMesBtoJobService {
return null;
}
private MesPartProdGroupWindowTime getWindowTimeByProductGroup(Long partProdGroupId, String organizeCode) throws ParseException {
DdlPackBean windowTimPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getNumEqualPack(partProdGroupId, "pid", windowTimPackBean);
List<MesPartProdGroupWindowTime> windowTimeList = windowTimeRao.findByHqlWhere(windowTimPackBean);
if (windowTimeList.isEmpty()) {
return null;
}
//获取当前时间的HH mm
Date now = new Date();
Calendar calendar = Calendar.getInstance();
calendar.setTime(now);
int hour = calendar.get(Calendar.HOUR_OF_DAY); // 获取小时24小时制
int minute = calendar.get(Calendar.MINUTE);
String nowTime = String.format("%02d:%02d", hour, minute);
//遍历窗口时间获取最新的窗口时间
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//使用降序
List<MesPartProdGroupWindowTime> sortedTime = windowTimeList.stream().sorted(Comparator.comparing(MesPartProdGroupWindowTime::getWindowTime,Comparator.reverseOrder())).collect(Collectors.toList());
for (MesPartProdGroupWindowTime time : sortedTime) {
if (Integer.parseInt(time.getWindowTime().replace(":", "")) > Integer.parseInt(nowTime.replace(":", ""))) {
continue;
}
calendar.set(Calendar.HOUR_OF_DAY, Integer.parseInt(time.getWindowTime().substring(0, 2)));
calendar.set(Calendar.MINUTE, Integer.parseInt(time.getWindowTime().substring(2, 4)));
calendar.set(Calendar.SECOND, 0);
Date dateCreateOrder = calendar.getTime();
if (Objects.isNull(time.getLastRunTime())) {
return time;
}
//校验lastRuntime 是否已经在当前圆整时区已经生成完了工单
Date lastRunTime = sdf.parse(time.getLastRunTime());
Calendar lastRunTimeCalendar = Calendar.getInstance();
lastRunTimeCalendar.setTime(lastRunTime);
lastRunTimeCalendar.set(Calendar.HOUR_OF_DAY, Integer.parseInt(time.getWindowTime().substring(0, 2)));
lastRunTimeCalendar.set(Calendar.MINUTE, Integer.parseInt(time.getWindowTime().substring(2, 4)));
lastRunTimeCalendar.set(Calendar.SECOND, 1);
//两个相同的时间比较before返回值为false,把上次运行的时间格式化为窗口时间加1秒是过滤掉相等的情况
if (dateCreateOrder.before(lastRunTimeCalendar.getTime())) {
continue;
}
log.info("零件生产组详情id:{},本次运行时间:{},格式化后的上次运行时间:{},上次运行时间为:{}",partProdGroupId,sdf.format(dateCreateOrder),sdf.format(lastRunTimeCalendar.getTime()),time.getLastRunTime());
return time;
}
return null;
}
}

@ -1,13 +1,23 @@
package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base;
import cn.estsh.i3plus.ext.mes.api.base.IMesConfigService;
import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
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.MesConfig;
import cn.estsh.i3plus.pojo.mes.repository.MesConfigRepository;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
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.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
* @Description:
@ -40,4 +50,60 @@ public class MesConfigService implements IMesConfigService {
return this.configRepository.getByProperty(new String[]{"isDeleted", "isValid", "cfgCode"},
new Object[]{CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), cfgCode});
}
@Override
public MesConfig getCfgValueByCode(String organizeCode,String cfgCode) {
return this.configRepository.getByProperty(new String[]{"organizeCode","isDeleted", "isValid", "cfgCode"},
new Object[]{organizeCode,CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), cfgCode});
}
@Override
public List<MesConfig> getConfigList(String organizeCode, String cfgCode, String cfgKey, String cfgType) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(cfgCode, MesExtConstWords.CFG_CODE, packBean);
DdlPreparedPack.getStringEqualPack(cfgKey, MesExtConstWords.CFG_KEY, packBean);
DdlPreparedPack.getStringEqualPack(cfgType, MesExtConstWords.CFG_TYPE, packBean);
return configRepository.findByHqlWhere(packBean);
}
@Override
public Boolean checkCfgValueIsContainItem(String organizeCode, String cfgCode, String cfgKey, String cfgType, String splitStr, String item) {
String cfgValue = getAndMergeCfgValue(organizeCode, cfgCode, cfgKey, cfgType, splitStr);
if (StringUtils.isEmpty(cfgValue)) return false;
List<String> cfgValueList = Arrays.asList(cfgValue.split(splitStr));
return (!CollectionUtils.isEmpty(cfgValueList) && cfgValueList.contains(item)) ? true : false;
}
private String getAndMergeCfgValue(String organizeCode, String cfgCode, String cfgKey, String cfgType, String splitStr) {
List<MesConfig> configList = getConfigList(organizeCode, cfgCode, cfgKey, cfgType);
if (CollectionUtils.isEmpty(configList)) return null;
return configList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getCfgValue()))).map(MesConfig::getCfgValue).collect(Collectors.joining(splitStr));
}
@Override
public Boolean checkShardingTablesObjectCfg(String organizeCode, String cfgKey, String item) {
return checkCfgValueIsContainItem(organizeCode, MesExtConstWords.MES_SHARDING_TABLES_OBJECT_CFG, cfgKey, CommonEnumUtil.SOFT_TYPE.MES.name(), MesExtConstWords.COMMA, item);
}
@Override
public List<String> findCfgValueContainItem(String organizeCode, String cfgCode, String cfgKey, String cfgType, String splitStr, List<String> itemList) {
String cfgValue = getAndMergeCfgValue(organizeCode, cfgCode, cfgKey, cfgType, splitStr);
if (StringUtils.isEmpty(cfgValue)) return null;
List<String> cfgValueList = Arrays.asList(cfgValue.split(splitStr));
if (CollectionUtils.isEmpty(cfgValueList)) return null;
return itemList.stream().filter(cfgValueList::contains).collect(Collectors.toList());
}
@Override
public List<String> findShardingTablesObjectCfg(String organizeCode, String cfgKey, List<String> itemList) {
if(CollectionUtils.isEmpty(itemList)) return null;
return findCfgValueContainItem(organizeCode, MesExtConstWords.MES_SHARDING_TABLES_OBJECT_CFG, cfgKey, CommonEnumUtil.SOFT_TYPE.MES.name(), MesExtConstWords.COMMA, itemList);
}
@Override
public void update(MesConfig mesConfig,String userName) {
ConvertBean.serviceModelUpdate(mesConfig,userName);
configRepository.update(mesConfig);
}
}

@ -2,7 +2,9 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base;
import cn.estsh.i3plus.ext.mes.api.base.IMesCustSoftInfoService;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.platform.common.tool.TimeTool;
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.shipping.MesCustSortInfo;
import org.springframework.stereotype.Service;
@ -23,6 +25,7 @@ public class MesCustSoftInfoServiceImpl extends BaseMesService<MesCustSortInfo>
public List<MesCustSortInfo> queryCustSortInfoList(String custCode, String custOrganizeCode, String infoPointCode, String organizeCode, List<String> custPartNoList) {
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(custCode,"custCode", ddlPackBean);
DdlPreparedPack.getNumEqualPack(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(),"serviceFlag", ddlPackBean);
DdlPreparedPack.getStringEqualPack(custOrganizeCode, "custOrganizeCode", ddlPackBean);
DdlPreparedPack.getStringEqualPack(infoPointCode, "infoPointCode", ddlPackBean);
DdlPreparedPack.getInPackList(custPartNoList,"custPartNo", ddlPackBean);
@ -31,8 +34,9 @@ public class MesCustSoftInfoServiceImpl extends BaseMesService<MesCustSortInfo>
@Override
public void updateCustSortInfo(MesCustSortInfo custSortInfo) {
ConvertBean.saveOrUpdate(custSortInfo,"edi");
baseRDao.update(custSortInfo);
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(custSortInfo.getOrganizeCode());
DdlPreparedPack.getNumEqualPack(custSortInfo.getId(),"id",ddlPackBean);
baseRDao.updateByProperties(new String[]{"serviceFlag","modifyUser","modifyDatetime"},new Object[]{CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(),"edi", TimeTool.getNowTime(true)},ddlPackBean);
}
}

@ -11,6 +11,7 @@ import cn.estsh.i3plus.pojo.base.enumutil.MesEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesEnum;
import cn.estsh.i3plus.pojo.mes.bean.MesEnumDetail;
import cn.estsh.i3plus.pojo.mes.dbinterface.MesInterfaceEnumUtil;
import cn.estsh.i3plus.pojo.mes.repository.MesEnumDetailRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesEnumRepository;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
@ -75,6 +76,7 @@ public class MesEnumExtService extends BaseMesService<MesEnum> implements IMesEn
Map<String, Object> enumMap = getEnumMap(organizeCode, enumName);
if (CollectionUtils.isEmpty(enumMap)) enumMap = getEnumByClazzEnum(enumName, MesExtEnumUtil.class);
if (CollectionUtils.isEmpty(enumMap)) enumMap = getEnumByClazzEnum(enumName, MesEnumUtil.class);
if (CollectionUtils.isEmpty(enumMap)) enumMap = getEnumByClazzEnum(enumName, MesInterfaceEnumUtil.class);
return enumMap;
}

@ -45,7 +45,7 @@ public class MesEquipmentVariableService extends BaseMesService<MesEquipmentVari
private ISyncFuncService syncFuncService;
protected void setPackQueryBean(MesEquipmentVariable bean, DdlPackBean packBean) {
DdlPreparedPack.getStringLikerPack(bean.getEquipmentCode(), "equipmentCode", packBean);
DdlPreparedPack.getStringEqualPack(bean.getEquipmentCode(), "equipmentCode", packBean);
DdlPreparedPack.getStringLikerPack(bean.getCode(), "code", packBean);
}

@ -0,0 +1,68 @@
package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base;
import cn.estsh.i3plus.ext.mes.api.base.IMesInterfaceDataMapperService;
import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.dbinterface.MesInterfaceDataMapper;
import cn.estsh.impp.framework.boot.util.ValidatorBean;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
/**
* @Description :
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/8/22 10:04
* @Modify:
**/
@Service
@Slf4j
public class MesInterfaceDataMapperServiceImpl extends BaseMesService<MesInterfaceDataMapper> implements IMesInterfaceDataMapperService {
@Override
protected void onInsertBean(MesInterfaceDataMapper item) {
// 数据校验
ValidatorBean.checkNotNull(item.getSrcTableName(), "来源表名不能为空");
ValidatorBean.checkNotNull(item.getSrcWhere(), "来源表的查询条件不能为空");
ValidatorBean.checkNotNull(item.getDestBeanName(), "目标实体对象的名字不能为空");
DdlPackBean seriesPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(item.getSrcTableName(), "srcTableName", seriesPackBean);
DdlPreparedPack.getStringEqualPack(item.getSrcWhere(), "srcWhere", seriesPackBean);
DdlPreparedPack.getStringEqualPack(item.getDestBeanName(), "destBeanName", seriesPackBean);
if (baseRDao.isExitByHql(seriesPackBean)) {
MesException.throwMesBusiException("来源表名为【%s】、查询条件为【%s】、目标实体对象为【%s】接口映射信息已存在",
item.getSrcTableName(), item.getSrcWhere(), item.getDestBeanName());
}
}
@Override
protected void onUpdateBean(MesInterfaceDataMapper item) {
// 数据校验
ValidatorBean.checkNotNull(item.getSrcTableName(), "来源表名不能为空");
ValidatorBean.checkNotNull(item.getSrcWhere(), "来源表的查询条件不能为空");
ValidatorBean.checkNotNull(item.getDestBeanName(), "目标实体对象的名字不能为空");
DdlPackBean seriesPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(item.getSrcTableName(), "srcTableName", seriesPackBean);
DdlPreparedPack.getStringEqualPack(item.getSrcWhere(), "srcWhere", seriesPackBean);
DdlPreparedPack.getStringEqualPack(item.getDestBeanName(), "destBeanName", seriesPackBean);
DdlPreparedPack.getNumNOEqualPack(item.getId(), "id", seriesPackBean);
if (baseRDao.isExitByHql(seriesPackBean)) {
MesException.throwMesBusiException("来源表名为【%s】、查询条件为【%s】、目标实体对象为【%s】接口映射信息已存在",
item.getSrcTableName(), item.getSrcWhere(), item.getDestBeanName());
}
}
@Override
protected void setPackQueryBean(MesInterfaceDataMapper bean, DdlPackBean packBean) {
DdlPreparedPack.getStringLikerPack(bean.getSrcTableName(), "srcTableName", packBean);
DdlPreparedPack.getStringLikerPack(bean.getDestBeanName(), "destBeanName", packBean);
DdlPreparedPack.getStringLikerPack(bean.getBusiRoute(), "busiRoute", packBean);
DdlPreparedPack.getStringLikerPack(bean.getGroupName(), "groupName", packBean);
DdlPreparedPack.getStringLikerPack(bean.getInterfaceName(), "interfaceName", packBean);
}
}

@ -2,6 +2,8 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base;
import cn.estsh.i3plus.ext.mes.api.base.IMesProduceSnService;
import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException;
import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords;
import cn.estsh.i3plus.ext.mes.pojo.util.OverwriteStringJoin;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
@ -11,6 +13,7 @@ import org.springframework.util.CollectionUtils;
import java.util.Comparator;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
@ -34,4 +37,15 @@ public class MesProduceSnServiceImpl extends BaseMesService<MesProduceSn> implem
}
return produceSnList.stream().filter(o -> null != o).sorted(Comparator.comparing(MesProduceSn::getCreateDatetime).reversed()).collect(Collectors.toList());
}
@Override
public List<MesProduceSn> findMesProduceSnList(String organizeCode, List<String> snList) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getInPackList(snList, "productSn", packBean);
List<MesProduceSn> produceSnList = baseRDao.findByHqlWhere(packBean);
if (CollectionUtils.isEmpty(produceSnList)) {
MesException.throwMesBusiException("条码【%s】信息不存在", OverwriteStringJoin.join(MesExtConstWords.COMMA, snList));
}
return produceSnList.stream().filter(Objects::nonNull).sorted(Comparator.comparing(MesProduceSn::getCreateDatetime).reversed()).collect(Collectors.toList());
}
}

@ -1,16 +1,37 @@
package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base;
import cn.estsh.i3plus.ext.mes.api.base.IMesProductionRecordService;
import cn.estsh.i3plus.ext.mes.apiservice.dao.IMesProdRuleNosortCfgDao;
import cn.estsh.i3plus.ext.mes.apiservice.utils.BeanUtil;
import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.base.common.PagerHelper;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.base.util.StringUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesProdRuleNosortCfg;
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord;
import cn.estsh.i3plus.pojo.mes.model.MesProductionRecordModel;
import cn.estsh.i3plus.pojo.mes.repository.MesProduceSnRepository;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import lombok.extern.slf4j.Slf4j;
import org.hibernate.SQLQuery;
import org.hibernate.transform.Transformers;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @Description :
@ -22,6 +43,14 @@ import java.util.List;
@Service
@Slf4j
public class MesProductionRecordServiceImpl extends BaseMesService<MesProductionRecord> implements IMesProductionRecordService {
@Autowired
private EntityManager entityManager;
@Autowired
private IMesProdRuleNosortCfgDao mesProdRuleNosortCfgDao;
@Autowired
private MesProduceSnRepository mesProduceSnRepository;
@Override
public List<MesProductionRecord> findMesProductionRecord(String organizeCode, String sn) {
@ -34,4 +63,156 @@ public class MesProductionRecordServiceImpl extends BaseMesService<MesProduction
}
return produceSnList;
}
@Override
public ListPager queryRecordGroupByPartNoWorkCellCode(MesProductionRecord mesProductionRecord, Pager pager) {
return queryERPMaterialStockHqlPager(mesProductionRecord, pager);
}
@Override
public ListPager<MesProductionRecordModel> queryMesProductionOffLine(MesProductionRecordModel mesProductionRecordModel, Pager pager) {
List<MesProdRuleNosortCfg> mesProdRuleNosortCfgs = mesProdRuleNosortCfgDao.findMesProdRuleNosortCfgByWorkCellCode(mesProductionRecordModel.getOnLineWorkCellCode(), mesProductionRecordModel.getPartNo(), mesProductionRecordModel.getOrganizeCode());
if(CollectionUtils.isEmpty(mesProdRuleNosortCfgs) || StringUtil.isEmpty(mesProdRuleNosortCfgs.iterator().next().getOutPartNo())) return new ListPager<>(new ArrayList<>(),pager);
//筛选下线工位的当前零件的产成条码
List<MesProduceSn> mesProduceSnList = getMesProduceSnList(mesProductionRecordModel);
if(CollectionUtils.isEmpty(mesProduceSnList)) return new ListPager<>(new ArrayList<>(),pager);
//在上线工位消耗进料条码且没有报工
DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesProductionRecordModel.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(mesProdRuleNosortCfgs.iterator().next().getOutPartNo(),"partNo",packBean);
DdlPreparedPack.getStringEqualPack(mesProductionRecordModel.getOnLineWorkCellCode(),"workCellCode",packBean);
DdlPreparedPack.getInPackList(mesProduceSnList.stream().map(MesProduceSn::getProductSn).distinct().collect(Collectors.toList()),"productSn",packBean);
List<MesProductionRecord> productionRecordList = baseRDao.findByHqlWhere(packBean);
Map<String,MesProductionRecord> productionRecordMap = new HashMap<>();
if(!CollectionUtils.isEmpty(productionRecordList)){
for (MesProductionRecord productionRecord : productionRecordList) {
productionRecordMap.put(productionRecord.getProductSn(),productionRecord);
}
}
//数据组装
List<MesProductionRecordModel> mesProductionRecordModelList = new ArrayList<>();
MesProductionRecordModel model;
for (MesProduceSn mesProduceSn : mesProduceSnList) {
model = new MesProductionRecordModel();
BeanUtils.copyProperties(mesProduceSn,model);
if(!productionRecordMap.containsKey(mesProduceSn.getProductSn()) || (productionRecordMap.containsKey(mesProduceSn.getProductSn()) && MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue() == productionRecordMap.get(mesProduceSn.getProductSn()).getReportStatus())){
model.setOffLineWorkCellCode(mesProduceSn.getWorkCellCode());
mesProductionRecordModelList.add(model);
}
}
pager = PagerHelper.getPager(pager, mesProductionRecordModelList.size());
return new ListPager<>(mesProductionRecordModelList.subList(pager.getStartRow(),
Math.min(pager.getPageSize() * pager.getCurrentPage(), mesProductionRecordModelList.size())), pager);
}
private List<MesProduceSn> getMesProduceSnList(MesProductionRecordModel mesProductionRecordModel) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesProductionRecordModel.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(mesProductionRecordModel.getPartNo(),"partNo",packBean);
DdlPreparedPack.getStringEqualPack(mesProductionRecordModel.getOffLineWorkCellCode(),"workCellCode",packBean);
DdlPreparedPack.getStringBiggerPack(mesProductionRecordModel.getCreateDateTimeStart(),"createDatetime",packBean);
DdlPreparedPack.getStringSmallerPack(mesProductionRecordModel.getCreateDateTimeEnd(),"createDatetime",packBean);
DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue(),"snStatus",packBean);
return mesProduceSnRepository.findByHqlWhere(packBean);
}
private ListPager<MesProductionRecord> queryERPMaterialStockHqlPager(MesProductionRecord mesProductionRecord, Pager pager) {
String org = mesProductionRecord.getOrganizeCode();
String startTime = mesProductionRecord.getCompleteDateTimeStart();
String endTime = mesProductionRecord.getCompleteDateTimeEnd();
List<MesProductionRecord> mesProductionRecordList = new ArrayList<>();
String countSql = "select count(1) ";
String commHql = " SELECT " +
" DISTINCT mpr.id as id," +
" mpr.organize_code as organizeCode," +
" mpr.create_date_time AS createDatetime, " +
" mpr.create_user AS createUser, " +
" mpr.modify_date_time AS modifyDatetime, " +
" mpr.modify_user AS modifyUser, " +
" mpr.part_no as partNo," +
" mpr.part_name as partName," +
" mpr.work_center_code as workCenterCode," +
" mpr.shift_code as shiftCode," +
" mpr.work_cell_code as workCellCode," +
" mpr.equipment_name as equipmentName," +
" mpr.complete_date_time as completeDateTime," +
" count( mpr.qty) as qty ";
String sql = " from mes_production_record mpr" +
" where 1=1 " +
" and mpr.organize_code =:organizeCode " +
" and mpr.report_type !='10' " +
" and mpr.is_deleted ='2' " +
" and mpr.is_valid ='1' ";
if (!StringUtil.isEmpty(startTime)) {
sql += " and mpr.complete_date_time >=:startTime ";
}
if (!StringUtil.isEmpty(endTime)) {
sql += " and mpr.complete_date_time <:endTime ";
}
if (!StringUtil.isEmpty(mesProductionRecord.getPartNo())) {
sql += " and mpr.part_no ='" + mesProductionRecord.getPartNo() + "' ";
}
if (!StringUtil.isEmpty(mesProductionRecord.getWorkCenterCode())) {
sql += " and mpr.work_center_code ='" + mesProductionRecord.getWorkCenterCode() + "' ";
}
if (!StringUtil.isEmpty(mesProductionRecord.getShiftCode())) {
sql += " and mpr.shift_code ='" + mesProductionRecord.getShiftCode() + "' ";
}
if (!StringUtil.isEmpty(mesProductionRecord.getWorkCellCode())) {
sql += " and mpr.work_cell_code ='" + mesProductionRecord.getWorkCellCode() + "' ";
}
if (!StringUtil.isEmpty(mesProductionRecord.getEquipmentName())) {
sql += " and mpr.equipment_name like '%" + mesProductionRecord.getEquipmentName() + "%' ";
}
sql += " GROUP BY mpr.part_no,mpr.work_cell_code ORDER BY mpr.complete_date_time desc ";
Query queryObject = entityManager.createNativeQuery(commHql + sql);
queryObject.setParameter("organizeCode", org);
if (!StringUtil.isEmpty(startTime)) {
queryObject.setParameter("startTime", startTime);
}
if (!StringUtil.isEmpty(endTime)) {
queryObject.setParameter("endTime", endTime);
}
Query queryCountObject = entityManager.createNativeQuery(countSql + sql);
queryCountObject.setParameter("organizeCode", org);
if (!StringUtil.isEmpty(startTime)) {
queryCountObject.setParameter("startTime", startTime);
}
if (!StringUtil.isEmpty(endTime)) {
queryCountObject.setParameter("endTime", endTime);
}
queryObject.unwrap(SQLQuery.class).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP)
.setMaxResults(pager.getPageSize()).setFirstResult(pager.getStartRow()).getResultList();
queryCountObject.unwrap(SQLQuery.class).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
List resultList = queryCountObject.getResultList();
int countSize = resultList.size();
if (countSize <= 0) {
return new ListPager(mesProductionRecordList,pager);
}
pager = PagerHelper.getPager(pager, countSize);
List<HashMap<String, Object>> hashMaps = queryObject.getResultList();
for (HashMap<String, Object> hashMap : hashMaps) {
try {
mesProductionRecordList.add((MesProductionRecord) BeanUtil.populateBean(hashMap, MesProductionRecord.class));
} catch (Exception e) {
e.printStackTrace();
}
}
return new ListPager(mesProductionRecordList, pager);
}
}

@ -29,6 +29,7 @@ import java.util.stream.Collectors;
public class MesQmsScrapService extends BaseMesService<MesQmsScrap> implements IMesQmsScrapService {
@Autowired
private MesPartInspectionDetailRepository partInspectionDetailRDao;
@Override
protected void setPackQueryBean(MesQmsScrap bean, DdlPackBean packBean) {
DdlPreparedPack.getStringLikerPack(bean.getPartNo(), "partNo", packBean);

@ -75,14 +75,26 @@ public class MesQmsSuspiciousService extends BaseMesService<MesQmsSuspicious> im
DdlPreparedPack.getStringEqualPack(partInspection.getSn(), "sn", packBeanNew);
packBeanNew.setOrderByStr(" order by createDatetime ");
MesPartInspection partInspectionDao = partInspectionRepository.getByProperty(packBeanNew);
//检验日期年月日可以根据创建日期截取,批次的不用取最早出现的
String qmsTime = partInspection.getCreateDatetime().substring(0, 13) + ":00:00";
if (!StringUtil.isEmpty(partInspectionDao)) {
if (!StringUtil.isEmpty(partInspectionDao) && partInspection.getSourceType() == MesExtEnumUtil.PART_INSPECTION_SOURCE_TYPE.SINGLE.getValue()) {
qmsTime = partInspectionDao.getCreateDatetime().substring(0, 13) + ":00:00";
}
partInspectionNew.setInspectionDate(qmsTime);
mesPartInspectionsListTime.add(partInspectionNew);
}
//根据时间分组发送
// 批次的:
//A 2024-08-21 08:00 10
//A 2024-08-21 08:00 10
//B 2024-08-20 08:00 10 检验日期 2024-08-21 08:00
//B 2024-08-21 08:00 10 检验日期 2024-08-21 08:00
//单件的:
//A 2024-08-21 08:00 1 0 0 1
//
//qms汇总表=====
//A 2024-08-21 08:00 21 0 0 1
//B 2024-08-21 08:00 20
Map<String, List<MesPartInspection>> mesPartInspectionsMap = mesPartInspectionsListTime.stream().collect(Collectors.groupingBy(MesPartInspection::getInspectionDate));
for (Map.Entry<String, List<MesPartInspection>> partInspection : mesPartInspectionsMap.entrySet()) {
List<MesPartInspection> mesPartInspections = partInspection.getValue();
@ -143,7 +155,7 @@ public class MesQmsSuspiciousService extends BaseMesService<MesQmsSuspicious> im
mesQmsSuspicious.setReworkScrapped(0);
mesQmsSuspicious.setPartNo(key);
mesQmsSuspicious.setPartName(next.getPartName());
//缺陷分类缺陷数量JOSN格式:
//缺陷分类缺陷数量JOSN格式:【批次&单件数量汇总时需要根据检验时间段合并】
//[{"Defect_Name":"缺陷01","Defect_Qty":1},{"Defect_Name":"缺陷02","Defect_Qty":2}]
Map<String, List<MesPartInspectionDetail>> listDefectMap = mesPartInspectionDetails.stream().collect(Collectors.groupingBy(MesPartInspectionDetail::getDefectTypeName));
List<Map<String, Object>> defectsList = new ArrayList<>();

@ -23,7 +23,7 @@ public class MesRawPackageDetailServiceImpl extends BaseMesService<MesRawPackage
protected void setPackQueryBean(MesRawPackageDetail bean, DdlPackBean packBean) {
DdlPreparedPack.getNumEqualPack(bean.getPid(), "pid", packBean);
DdlPreparedPack.getStringLikerPack(bean.getPackageType(), "packageType", packBean);
DdlPreparedPack.getNumEqualPack(bean.getPackageType(), "packageType", packBean);
DdlPreparedPack.getStringLikerPack(bean.getEquipCode(), "equipCode", packBean);
DdlPreparedPack.getStringLikerPack(bean.getPackageSn(), "packageSn", packBean);
}

@ -23,7 +23,7 @@ import java.util.UUID;
public class MesRawPackageServiceImpl extends BaseMesService<MesRawPackage> implements IMesRawPackageService {
protected void setPackQueryBean(MesRawPackage bean, DdlPackBean packBean) {
DdlPreparedPack.getStringLikerPack(bean.getPackageType(), "packageType", packBean);
DdlPreparedPack.getNumEqualPack(bean.getPackageType(), "packageType", packBean);
DdlPreparedPack.getStringLikerPack(bean.getName(), "name", packBean);
}
@ -45,7 +45,7 @@ public class MesRawPackageServiceImpl extends BaseMesService<MesRawPackage> impl
ValidatorBean.checkNotNull(item.getPackageType(), "容器类型");
ValidatorBean.checkNotNull(item.getName(), "容器名称");
DdlPackBean packBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(item.getPackageType(), "packageType", packBean);
DdlPreparedPack.getNumEqualPack(item.getPackageType(), "packageType", packBean);
DdlPreparedPack.getNumNOEqualPack(item.getId(), "id", packBean);
if (baseRDao.isExitByHql(packBean)) {
MesException.throwMesBusiException("容器类型【%s】已存在", item.getPackageType());

@ -0,0 +1,58 @@
package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base;
import cn.estsh.i3plus.ext.mes.api.base.IMesScriptPersistenceService;
import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesScriptPersistence;
import cn.estsh.i3plus.pojo.mes.dbinterface.MesInterfaceDataMapper;
import cn.estsh.impp.framework.boot.util.ValidatorBean;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
/**
* @Description :
* @Reference :
* @Author : junsheng.li
* @CreateDate 2024/8/22 10:04
* @Modify:
**/
@Service
@Slf4j
public class MesScriptPersistenceServiceImpl extends BaseMesService<MesScriptPersistence> implements IMesScriptPersistenceService {
@Override
protected void onInsertBean(MesScriptPersistence item) {
// 数据校验
ValidatorBean.checkNotNull(item.getScriptNo(), "脚本编号不能为空");
DdlPackBean seriesPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(item.getScriptNo(), "scriptNo", seriesPackBean);
if (baseRDao.isExitByHql(seriesPackBean)) {
MesException.throwMesBusiException("脚本编号【%s】已存在", item.getScriptNo());
}
}
@Override
protected void onUpdateBean(MesScriptPersistence item) {
// 数据校验
ValidatorBean.checkNotNull(item.getScriptNo(), "脚本编号不能为空");
DdlPackBean seriesPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(item.getScriptNo(), "scriptNo", seriesPackBean);
DdlPreparedPack.getNumNOEqualPack(item.getId(), "id", seriesPackBean);
if (baseRDao.isExitByHql(seriesPackBean)) {
MesException.throwMesBusiException("脚本编号【%s】已存在", item.getScriptNo());
}
}
@Override
protected void setPackQueryBean(MesScriptPersistence bean, DdlPackBean packBean) {
DdlPreparedPack.getStringLikerPack(bean.getScriptNo(), "scriptNo", packBean);
DdlPreparedPack.getStringRightLikerPack(bean.getScriptName(), "scriptName", packBean);
DdlPreparedPack.getNumEqualPack(bean.getScriptType(), "scriptType", packBean);
DdlPreparedPack.getNumEqualPack(bean.getLanguageType(), "languageType", packBean);
}
}

@ -1,20 +1,32 @@
package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base;
import cn.estsh.i3plus.ext.mes.api.base.IMesProduceSnService;
import cn.estsh.i3plus.ext.mes.api.base.IMesShippingOrderManagementDetailService;
import cn.estsh.i3plus.ext.mes.apiservice.dao.IMesShippingOrderManagementDetailDao;
import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException;
import cn.estsh.i3plus.ext.mes.pojo.model.MesShippingOrderManagementDetailModel;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.base.common.PagerHelper;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail;
import cn.estsh.i3plus.pojo.mes.repository.MesProduceSnRepository;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
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.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
@Service
@Slf4j
@ -23,6 +35,12 @@ public class MesShippingOrderManagementDetailService extends BaseMesService<MesS
@Autowired
private IMesShippingOrderManagementDetailDao shippingOrderManagementDetailDao;
@Autowired
private IMesProduceSnService mesProduceSnService;
@Autowired
private MesProduceSnRepository mesProduceSnRepository;
protected void setPackQueryBean(MesShippingOrderManagementDetail bean, DdlPackBean packBean) {
DdlPreparedPack.getNumEqualPack(bean.getPid(), "pid", packBean);
DdlPreparedPack.getStringLikerPack(bean.getPartNo(), "partNo", packBean);
@ -41,4 +59,51 @@ public class MesShippingOrderManagementDetailService extends BaseMesService<MesS
return new ListPager<>(modelList, pager);
}
@Override
public ListPager<MesShippingOrderManagementDetailModel> queryMesShippingDetailsByPager(MesShippingOrderManagementDetailModel mesShippingOrderManagementDetailModel, Pager pager) {
return shippingOrderManagementDetailDao.queryMesShippingDetailsByPager(mesShippingOrderManagementDetailModel, pager);
}
@Override
public void doShippingBack(Long[] idList, String organizeCode, String userName) {
List<MesShippingOrderManagementDetail> detailList = getManagementDetails(idList, organizeCode, userName);
if (CollectionUtils.isEmpty(detailList)) MesException.throwMesBusiException("选择数据无效,请检查");
Map<String, List<MesProduceSn>> mesProduceSnMap = getMesProduceSnMap(organizeCode, detailList);
List<MesProduceSn> updateMesProduceSn = new ArrayList<>();
for (MesShippingOrderManagementDetail detail : detailList) {
if (!mesProduceSnMap.containsKey(detail.getBarcode()))
MesException.throwMesBusiException("发运单条码[%s]信息不存在", detail.getBarcode());
//更新条码状态为完成
MesProduceSn mesProduceSn = mesProduceSnMap.get(detail.getBarcode()).iterator().next();
mesProduceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue());
mesProduceSn.setSystemSyncStatus(CommonEnumUtil.FALSE);
ConvertBean.serviceModelUpdate(mesProduceSn, userName);
updateMesProduceSn.add(mesProduceSn);
//软删明细
detail.setIsDeleted(CommonEnumUtil.VALID);
detail.setSystemSyncStatus(CommonEnumUtil.FALSE);
ConvertBean.serviceModelUpdate(detail, userName);
}
baseRDao.saveAll(detailList);
if (!updateMesProduceSn.isEmpty()) {
mesProduceSnRepository.saveAll(updateMesProduceSn);
}
}
private Map<String, List<MesProduceSn>> getMesProduceSnMap(String organizeCode, List<MesShippingOrderManagementDetail> detailList) {
List<String> snList = detailList.stream().map(MesShippingOrderManagementDetail::getBarcode).collect(Collectors.toList());
if (CollectionUtils.isEmpty(snList)) MesException.throwMesBusiException("发运单条码信息不存在");
List<MesProduceSn> mesProduceSnList = mesProduceSnService.findMesProduceSnList(organizeCode, snList);
return mesProduceSnList.stream().collect(Collectors.groupingBy(MesProduceSn::getProductSn));
}
private List<MesShippingOrderManagementDetail> getManagementDetails(Long[] idList, String organizeCode, String userName) {
if (Objects.isNull(idList) || StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(userName)) return null;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getInPackArray(idList, "id", packBean);
List<MesShippingOrderManagementDetail> detailList = baseRDao.findByHqlWhere(packBean);
if (CollectionUtils.isEmpty(detailList) || detailList.size() <= 0)
MesException.throwMesBusiException("选择数据不存在,请检查数据");
return detailList;
}
}

@ -3,6 +3,7 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base;
import cn.estsh.i3plus.ext.mes.api.base.IMesWorkCenterPartRelationService;
import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords;
import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum;
import cn.estsh.i3plus.platform.common.tool.TimeTool;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
@ -50,7 +51,7 @@ public class MesWorkCenterPartRelationService extends BaseMesService<MesWorkCent
//去重
ArrayList<MesWorkCenterPartRelation> relationList = beanList.stream().collect(Collectors.collectingAndThen(
Collectors.toCollection(() -> new TreeSet<>(
Comparator.comparing(p -> p.getPartNo() + ";" + p.getWorkCenterName()))), ArrayList::new));
Comparator.comparing(p -> p.getPartNo() + ";" + p.getWorkCenterCode()))), ArrayList::new));
for (MesWorkCenterPartRelation item : relationList) {
//根据零件号查询数据
@ -68,17 +69,17 @@ public class MesWorkCenterPartRelationService extends BaseMesService<MesWorkCent
item.setPartName(mesPartSap.getPartName());
//根据产线名称去查询数据
DdlPackBean workCenterPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(item.getWorkCenterName(),"workCenterName",workCenterPackBean);
DdlPreparedPack.getStringEqualPack(item.getWorkCenterCode(),"workCenterCode",workCenterPackBean);
List<MesWorkCenter> centerList = mesWorkCenterRao.findByHqlWhere(workCenterPackBean);
if (centerList.isEmpty()) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("产线【%s】不存在!",item.getWorkCenterName())
.setErrorDetail("产线【%s】不存在!",item.getWorkCenterCode())
.build();
}
MesWorkCenter mesWorkCenter = centerList.get(0);
item.setWorkCenterCode(mesWorkCenter.getWorkCenterCode());
item.setWorkCenterName(mesWorkCenter.getWorkCenterName());
}
return relationList;
@ -90,15 +91,13 @@ public class MesWorkCenterPartRelationService extends BaseMesService<MesWorkCent
DdlPackBean partRelationPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(item.getWorkCenterName(), "workCenterName", partRelationPackBean);
DdlPreparedPack.getStringEqualPack(item.getWorkCenterCode(), "workCenterCode", partRelationPackBean);
DdlPreparedPack.getStringEqualPack(item.getPartNo(), "partNo", partRelationPackBean);
boolean flg = baseRDao.isExitByHql(partRelationPackBean);
if (flg) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("产线【%s】与零件【%s】关系已存在,请勿重复添加!",item.getWorkCenterName(),item.getPartNo())
.build();
baseRDao.updateByProperties(
new String[]{"modifyUser", "modifyDatetime", "isDeleted"},
new Object[]{item.getModifyUser(), TimeTool.getNowTime(true), CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()},partRelationPackBean);
}
}
}

@ -5,6 +5,7 @@ import cn.estsh.i3plus.ext.mes.apiservice.dao.IMesWorkOrderDao;
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.ext.mes.pojo.util.MesExtConstWords;
import cn.estsh.i3plus.mes.api.iservice.busi.ISyncFuncService;
import cn.estsh.i3plus.mes.apiservice.util.DateUtil;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
@ -39,6 +40,7 @@ import org.springframework.util.StringUtils;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@Service
@Slf4j
@ -890,6 +892,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
mesWorkOrderDb.getAdjustQty(), mesWorkOrderDb.getReportedQty());
}
}
mesWorkOrderDb.setRemark(mesWorkOrder.getRemark());
//更新工单
updateMesWorkOrder(mesWorkOrderDb,(MesExtEnumUtil.REPORT_TYPE.REPORT.getValue() == mesWorkOrder.getReportType()) ? MesExtEnumUtil.WORK_ORDER_LOG_TYPE.REPORT : MesExtEnumUtil.WORK_ORDER_LOG_TYPE.REPORT_ADJUST,mesWorkOrder.getNum());
//试制单不报工
@ -897,8 +900,9 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
String sn = getStringList(mesWorkOrder);
//保存数据
List<MesProductOffLine> mesProductOffLineList = new ArrayList<>();
String nowTime = TimeTool.getNowTime(true);
for (MesBom mesBom : mesBoms) {
mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrder, mesProductVersion, sn, mesBom, false));
mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrder, mesProductVersion, sn, mesBom, false,nowTime));
}
mesProductOffLineService.insertBatch(mesProductOffLineList);
}
@ -991,8 +995,9 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
MesPartSap mesPartSap = mesPartSapService.getMesPartSapByPartNo(mesWorkOrder.getPartNo(), mesWorkOrder.getOrganizeCode());
//成品汇报
if (isReport) {
String nowTime = TimeTool.getNowTime(true);
for (MesBom mesBom : mesBoms) {
mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrderNew, mesProductVersion, sn, mesBom, false));
mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrderNew, mesProductVersion, sn, mesBom, false,nowTime));
}
}
//成品移库
@ -1005,8 +1010,9 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
} else if (MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue() == mesWorkOrder.getWorkOrderType()) {
MesProdRuleNosortCfg mesProdRuleNoSortCfg = mesProdRuleNosortCfgService.findMesProdRuleNosortCfgByWorkCenterCode(mesWorkOrder.getWorkCenterCode(), mesWorkOrder.getPartNo(), mesWorkOrder.getOrganizeCode());
if (MesExtEnumUtil.NOSORT_REPORT_TYPE.REPORT.getValue() == mesProdRuleNoSortCfg.getReportType()) {
String nowTime = TimeTool.getNowTime(true);
for (MesBom mesBom : mesBoms) {
mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrderNew, mesProductVersion, sn, mesBom, false));
mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrderNew, mesProductVersion, sn, mesBom, false,nowTime));
}
}
@ -1050,8 +1056,9 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
List<MesBom> mesBoms = mesBomService.findBomList(mesPart.getOrganizeCode(), mesPart, mesProductVersion.getAlternativePartList());
//保存数据
List<MesProductOffLine> mesProductOffLineList = new ArrayList<>();
String nowTime = TimeTool.getNowTime(true);
for (MesBom mesBom : mesBoms) {
mesProductOffLineList.add(getMesProductOffLine(model, mesPart, mesProductVersion, mesBom));
mesProductOffLineList.add(getMesProductOffLine(model, mesPart, mesProductVersion, mesBom,nowTime));
}
mesProductOffLineService.insertBatch(mesProductOffLineList);
}
@ -1099,7 +1106,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
workOrderLogService.saveMesWorkOrderLog(mesWorkOrder,type,qty);
}
private MesProductOffLine getMesProductOffLine(WmsProductModel model, MesPart mesPart, MesProductVersion mesProductVersion, MesBom mesBom) {
private MesProductOffLine getMesProductOffLine(WmsProductModel model, MesPart mesPart, MesProductVersion mesProductVersion, MesBom mesBom,String nowTime) {
MesProductOffLine newMesProductOffLine = new MesProductOffLine();
newMesProductOffLine.setReportPartNo(mesPart.getPartNo());
newMesProductOffLine.setReportPartNameRdd(mesPart.getPartName());
@ -1121,6 +1128,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
newMesProductOffLine.setOrderNo(model.getShipOrderNo());
newMesProductOffLine.setCustNo(model.getCustNo());
newMesProductOffLine.setCustOrder(model.getCustOrderNo());
newMesProductOffLine.setDescription(nowTime);
ConvertBean.serviceModelInitialize(newMesProductOffLine, model.getUserName());
return newMesProductOffLine;
@ -1169,7 +1177,8 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
}
//汇报
if (isItemReport) {
mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrder, mesProductVersion, sn, mesBom, true));
String nowTime = TimeTool.getNowTime(true);
mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrder, mesProductVersion, sn, mesBom, true,nowTime));
}
//移库
if (isItemMove) {
@ -1228,7 +1237,7 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
private MesProductOffLine creatMesProductOffLine(MesWorkOrder mesWorkOrder, MesProductVersion mesProductVersion,
String sn, MesBom mesBom, boolean isItemReport) {
String sn, MesBom mesBom, boolean isItemReport,String nowTime) {
MesProductOffLine newMesProductOffLine;
newMesProductOffLine = new MesProductOffLine();
if (!isItemReport) {
@ -1248,23 +1257,34 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
newMesProductOffLine.setUnit(mesBom.getUnit());
newMesProductOffLine.setItemUnit(mesBom.getItemUnit());
newMesProductOffLine.setWorkOrderNo(mesWorkOrder.getWorkOrderNo());
newMesProductOffLine.setWorkOrderType(mesWorkOrder.getWorkOrderType());
newMesProductOffLine.setWorkCenterCode(mesWorkOrder.getWorkCenterCode());
newMesProductOffLine.setWorkCellCode(mesWorkOrder.getWorkCellCode());
newMesProductOffLine.setReportType(mesWorkOrder.getReportType());
newMesProductOffLine.setSapWorkCenter(mesWorkOrder.getErpWorkCenter());
newMesProductOffLine.setOrganizeCode(mesWorkOrder.getOrganizeCode());
newMesProductOffLine.setDescription(nowTime);
ConvertBean.serviceModelInitialize(newMesProductOffLine, mesWorkOrder.getCreateUser());
return newMesProductOffLine;
}
@Override
public List<MesWorkOrderModel> sumMesWorkOrderQtyToSap(String organizeCode) {
public List<MesWorkOrderModel> sumMesWorkOrderQtyToSap(String organizeCode,String lastSendToSapTime) {
List<Integer> statusList = new ArrayList<>();
statusList.add(MesExtEnumUtil.ORDER_STATUS.CREATE.getValue());
// statusList.add(MesExtEnumUtil.ORDER_STATUS.CLOSE.getValue());
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue(),MesExtConstWords.WORK_ORDER_TYPE,packBean);
DdlPreparedPack.getStringNoEqualPack(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue(),"orderFlag",packBean);
DdlPreparedPack.getNotInPack(statusList, MesExtConstWords.WORK_ORDER_STATUS, packBean);
DdlPreparedPack.getStringBiggerPack(lastSendToSapTime,"modifyDatetime",packBean);
List<MesWorkOrder> mesWorkOrderList = mesWorkOrderRDao.findByHqlWhere(packBean);
if(CollectionUtils.isEmpty(mesWorkOrderList)) return null;
List<String> partNoList = mesWorkOrderList.stream().map(MesWorkOrder::getPartNo).filter(partNo -> !StringUtil.isEmptyAndNull(partNo)).distinct().collect(Collectors.toList());
if(CollectionUtils.isEmpty(partNoList)) return null;
//查询汇总工单数量
return mesWorkOrderDao.sumMesWorkOrderQtyToSap(organizeCode, statusList);
return mesWorkOrderDao.sumMesWorkOrderQtyToSap(organizeCode, statusList,partNoList);
}
@Override
@ -1470,10 +1490,11 @@ public class MesWorkOrderService extends BaseMesService<MesWorkOrder> implements
newMesProductOffLine.setQty(1d);
newMesProductOffLine.setReportSn(produceSn.getProductSn());
newMesProductOffLine.setBomVersion(mesWorkOrderDb.getProductVersion());
newMesProductOffLine.setSerialNumber(produceSn.getProductSn());
newMesProductOffLine.setSerialNumber(produceSn.getSerialNumber());
newMesProductOffLine.setUnit(mesBom.getUnit());
newMesProductOffLine.setItemUnit(mesBom.getItemUnit());
newMesProductOffLine.setWorkOrderNo(mesWorkOrderDb.getWorkOrderNo());
newMesProductOffLine.setWorkOrderType(mesWorkOrderDb.getWorkOrderType());
newMesProductOffLine.setWorkCenterCode(mesWorkOrderDb.getWorkCenterCode());
newMesProductOffLine.setWorkCellCode(mesWorkOrderDb.getWorkCellCode());
newMesProductOffLine.setReportType(mesWorkOrderDb.getReportType());

@ -1,9 +1,9 @@
package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base;
import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderToSapService;
import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderToSap;
import cn.estsh.i3plus.pojo.mes.model.MesWorkOrderModel;
@ -11,8 +11,8 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.List;
import java.util.Objects;
import java.util.*;
import java.util.stream.Collectors;
@Service
@Slf4j
@ -28,25 +28,41 @@ public class MesWorkOrderToSapServiceImpl extends BaseMesService<MesWorkOrderToS
}
@Override
public void doMesWorkOrder(String organizeCode,List<MesWorkOrderModel> mesWorkOrderList) {
Pager pager = new Pager(1,1);
DdlPackBean ddlPackBean = null;
public void doMesWorkOrder(String organizeCode,String userName,List<MesWorkOrderModel> mesWorkOrderList) {
//查询表里原有数据
Map<String, MesWorkOrderToSap> workOrderToSapMap = getStringMesWorkOrderToSapMap(organizeCode, mesWorkOrderList);
//数据处理
for (MesWorkOrderModel mesWorkOrder : mesWorkOrderList) {
mesWorkOrder.setOrganizeCode(organizeCode);
mesWorkOrder.setModifyUser("job");
String key = new StringJoiner(MesExtConstWords.COMMA).add(mesWorkOrder.getPartNo()).add(mesWorkOrder.getPlanStartTime()).toString();
mesWorkOrder.setModifyUser(userName);
//计划开始时间+物料查询发送Sap的数据
ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(mesWorkOrder.getPlanStartTime(),"pedtr",ddlPackBean);
DdlPreparedPack.getStringEqualPack(mesWorkOrder.getPartNo(),"plmat",ddlPackBean);
ddlPackBean.setOrderByStr(" order by createDatetime desc ");
List<MesWorkOrderToSap> workOrderToSapList = baseRDao.findByHqlPage(ddlPackBean,pager);
if(CollectionUtils.isEmpty(workOrderToSapList)){
if(!workOrderToSapMap.containsKey(key)){
insert(mesWorkOrder);
}else{
if(!Objects.equals(workOrderToSapList.iterator().next().getGsmng(),mesWorkOrder.getQty())){
if(!Objects.equals(workOrderToSapMap.get(key).getGsmng(),mesWorkOrder.getQty())){
insert(mesWorkOrder);
}
}
}
}
private Map<String, MesWorkOrderToSap> getStringMesWorkOrderToSapMap(String organizeCode, List<MesWorkOrderModel> mesWorkOrderList) {
List<String> partNoList = mesWorkOrderList.stream().map(MesWorkOrderModel::getPartNo).distinct().collect(Collectors.toList());
List<String> planStartTime = mesWorkOrderList.stream().map(MesWorkOrderModel::getPlanStartTime).distinct().collect(Collectors.toList());
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getInPackList(planStartTime,"pedtr",ddlPackBean);
DdlPreparedPack.getInPackList(partNoList,"plmat",ddlPackBean);
ddlPackBean.setOrderByStr(" order by createDatetime desc ");
List<MesWorkOrderToSap> workOrderToSapList = baseRDao.findByHqlWhere(ddlPackBean);
Map<String,MesWorkOrderToSap> workOrderToSapMap = new HashMap<>();
if(!CollectionUtils.isEmpty(workOrderToSapList)){
for (MesWorkOrderToSap mesWorkOrderToSap : workOrderToSapList) {
String key = new StringJoiner(MesExtConstWords.COMMA).add(mesWorkOrderToSap.getPlmat()).add(mesWorkOrderToSap.getPedtr()).toString();
if(!workOrderToSapMap.containsKey(key)){
workOrderToSapMap.put(key,mesWorkOrderToSap);
}
}
}
return workOrderToSapMap;
}
}

@ -24,6 +24,7 @@ import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
@ -70,22 +71,33 @@ public class MesTimeRoundnessService implements IRoundnessStrategy {
try { //4. 如果没有订单需要更新窗口时间 TM_BAS_PRODUCT_GROUP_WINDOW_TIME
MesPartProdGroupWindowTime time = getWindowTimeByProductGroup(partProdGroup.id, partProdGroup.getOrganizeCode());
if (Objects.isNull(time)) {
log.info("当前零件生产组:{}没有维护时间窗口", partProdGroup.getPartProdGroupName());
log.info("当前零件生产组:{} 没有到达生产工单的窗口", partProdGroup.getPartProdGroupName());
return;
}
String lastRunTime = TimeTool.getNowTime(true);
log.info("当前零件生产组:{},更新本次执行时间:{},窗口时间为:{}",partProdGroup.getPartProdGroupName(),lastRunTime,time.getWindowTime());
ConvertBean.saveOrUpdate(time, "JOB");
time.setLastRunTime(lastRunTime);
windowTimeRao.update(time);
DateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
Long createSeq = Long.parseLong(dateFormat.format(new Date()));
long createSeq = Long.parseLong(dateFormat.format(new Date()));
Map<String, List<MesCustSortInfo>> sortInfoMap = sortInfoList.stream().collect(Collectors.groupingBy(MesCustSortInfo::getCustPartNo));
Map<String, MesPartProdGroupDetail> prodGroupDetailMap = details.stream().collect(Collectors.toMap(MesPartProdGroupDetail::getCustPartNo, Function.identity()));
Set<String> softInfoKeySet = sortInfoMap.keySet();
//遍历零件生产组零件,过滤出
for (MesPartProdGroupDetail detail : details) {
for (String softInfoKey : softInfoKeySet) {
MesPartProdGroupDetail detail = prodGroupDetailMap.get(softInfoKey);
if (detail == null){
continue;
}
//根据detail.id 获取
MesProdGroupPartBtoCount btoCountInfo = getByGroupPartId(detail.getId(), detail.getOrganizeCode());
//历史累计差异
double btoCount = btoCountInfo.getCurrentQty();
//获取圆整数量
double roundQty = detail.getRoundQty();
List<MesCustSortInfo> sortInfos = sortInfoList.stream().filter(info -> info.getCustPartNo().equals(detail.getCustPartNo())).collect(Collectors.toList());
if (sortInfos.isEmpty()) {
List<MesCustSortInfo> sortInfos = sortInfoMap.get(detail.getCustPartNo());
if (sortInfos == null ||sortInfos.isEmpty()) {
continue;
}
//本次排序需要的数量
@ -116,7 +128,7 @@ public class MesTimeRoundnessService implements IRoundnessStrategy {
mesWorkOrder.setFid(UUID.randomUUID().toString());
mesWorkOrder.setWorkOrderNo(resultList.get(0));
mesWorkOrder.setWorkOrderType(MesExtEnumUtil.ORDER_TYPE.BTO.getValue());
mesWorkOrder.setWorkOrderSeq(createSeq.toString());
mesWorkOrder.setWorkOrderSeq(Long.toString(createSeq));
//生产顺序号 【前缀(WOPS)+工厂号+产线+特殊符号#+10位流水 步长10】{prefix}{org}{prodLocation}{dynamicRule}{serialNo})
GenSerialNoModel proSeqGenSerialNoModel = new GenSerialNoModel(MesCommonConstant.MES_WORK_ORDER_PRODUCT_SEQ);
proSeqGenSerialNoModel.setOrganizeCode(detail.getOrganizeCode());
@ -171,9 +183,10 @@ public class MesTimeRoundnessService implements IRoundnessStrategy {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int hours = calendar.get(Calendar.HOUR_OF_DAY);
int minutes = calendar.get(Calendar.MINUTE);
String shiftTime = String.format("%02d:%02d", hours, minutes);
if (shiftList == null || shiftList.isEmpty()) {
if (!shiftList.isEmpty()) {
for (MesShift shift : shiftList) {
String startTime = shift.getStartTime().replace(":", "");
String endTime = shift.getEndTime().replace(":", "");
@ -220,7 +233,9 @@ public class MesTimeRoundnessService implements IRoundnessStrategy {
// 保存工单
ConvertBean.saveOrUpdate(mesWorkOrder, "edi");
if (mesWorkOrder.getQty() > 0){
mesWorkOrderRao.insert(mesWorkOrder);
}
//更新 custSortInfo 状态已解析
for (MesCustSortInfo sortInfo : sortInfos) {
sortInfo.setServiceFlag(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
@ -228,9 +243,7 @@ public class MesTimeRoundnessService implements IRoundnessStrategy {
}
}
ConvertBean.saveOrUpdate(time, "JOB");
time.setLastRunTime(TimeTool.getNowTime(true));
windowTimeRao.update(time);
} catch (Exception e) {
log.error("创建工单报错:{}", Arrays.toString(e.getStackTrace()));
}
@ -254,21 +267,31 @@ public class MesTimeRoundnessService implements IRoundnessStrategy {
String nowTime = String.format("%02d:%02d", hour, minute);
//遍历窗口时间获取最新的窗口时间
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
List<MesPartProdGroupWindowTime> sortedTime = windowTimeList.stream().sorted(Comparator.comparing(MesPartProdGroupWindowTime::getWindowTime)).collect(Collectors.toList());
//使用降序
List<MesPartProdGroupWindowTime> sortedTime = windowTimeList.stream().sorted(Comparator.comparing(MesPartProdGroupWindowTime::getWindowTime,Comparator.reverseOrder())).collect(Collectors.toList());
for (MesPartProdGroupWindowTime time : sortedTime) {
if (nowTime.compareTo(time.getWindowTime()) < 0) {
if (Integer.parseInt(time.getWindowTime().replace(":", "")) > Integer.parseInt(nowTime.replace(":", ""))) {
continue;
}
calendar.set(Calendar.HOUR_OF_DAY, Integer.parseInt(time.getWindowTime().substring(0, 2)));
calendar.set(Calendar.MINUTE, Integer.parseInt(time.getWindowTime().substring(2, 4)));
calendar.set(Calendar.SECOND, 0);
Date dateCreateOrder = calendar.getTime();
if (Objects.isNull(time.getLastRunTime())) {
return time;
}
//校验lastRuntime 是否已经在当前圆整时区已经生成完了工单
Date lastRunTime = sdf.parse(time.getLastRunTime());
if (dateCreateOrder.compareTo(lastRunTime) < 0) {
Calendar lastRunTimeCalendar = Calendar.getInstance();
lastRunTimeCalendar.setTime(lastRunTime);
lastRunTimeCalendar.set(Calendar.HOUR_OF_DAY, Integer.parseInt(time.getWindowTime().substring(0, 2)));
lastRunTimeCalendar.set(Calendar.MINUTE, Integer.parseInt(time.getWindowTime().substring(2, 4)));
lastRunTimeCalendar.set(Calendar.SECOND, 1);
//两个相同的时间比较before返回值为false,把上次运行的时间格式化为窗口时间加1秒是过滤掉相等的情况
if (dateCreateOrder.before(lastRunTimeCalendar.getTime())) {
continue;
}
log.info("零件生产组详情id:{},本次运行时间:{},格式化后的上次运行时间:{},上次运行时间为:{}",partProdGroupId,sdf.format(dateCreateOrder),sdf.format(lastRunTimeCalendar.getTime()),time.getLastRunTime());
return time;
}
return null;

@ -17,6 +17,8 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
@ -105,11 +107,15 @@ public class IMesYfBoardServiceImpl implements IMesYfBoardService {
}
resultModel.setWorkCenterCompletedQuantity(workCenterCompletedQuantity);
resultModel.setWorkCenterPlannedQuantity(workCenterPlannedQuantity);
double workCenterCompletionRate;
if (workCenterCompletedQuantity == 0 || workCenterPlannedQuantity == 0) {
resultModel.setWorkCenterCompletionRate(0D);
workCenterCompletionRate = 0;
}else {
resultModel.setWorkCenterCompletionRate(workCenterCompletedQuantity * 100 / workCenterPlannedQuantity);
workCenterCompletionRate = workCenterCompletedQuantity * 100 / workCenterPlannedQuantity;
}
BigDecimal bd = new BigDecimal(workCenterCompletionRate);
bd = bd.setScale(2, RoundingMode.HALF_UP);
resultModel.setWorkCenterCompletionRate(bd);
return resultModel;
}
@ -121,6 +127,18 @@ public class IMesYfBoardServiceImpl implements IMesYfBoardService {
conditionModel.getTimeRangeIdentification(), conditionModel.getOrganizeCode());
//查询工单
List<MesWorkOrder> mesWorkOrderList = queryMesWorkOrder(timeZoneMap, conditionModel);
if (!CollectionUtils.isEmpty(mesWorkOrderList)) {
Set<String> workOrderNoSet = mesWorkOrderList.stream().map(MesWorkOrder::getWorkOrderNo).collect(Collectors.toSet());
//查询当前产线在指定时间段内加工完成的工单条码数据
List<MesWorkCenterBoardResultModel> mesProductOffLineQueryResultList = mesYfBoardDao.queryCompletedSnInfo(
conditionModel.getWorkCenterCodeList().get(0),
conditionModel.getOrganizeCode(),
timeZoneMap.get(conditionModel.getWorkCenterCodeList().get(0)).get(START_TIME),
timeZoneMap.get(conditionModel.getWorkCenterCodeList().get(0)).get(END_TIME),
workOrderNoSet);
//查询结果按照工单号分组
Map<String, List<MesWorkCenterBoardResultModel>> workOrderAndSnDataByOrderNoMap =
mesProductOffLineQueryResultList.stream().collect(Collectors.groupingBy(MesWorkCenterBoardResultModel::getWorkOrderNo));
//封装汇总数据
for (MesWorkOrder mesWorkOrder : mesWorkOrderList) {
MesWorkCenterBoardResultModel resultModel = new MesWorkCenterBoardResultModel();
@ -129,13 +147,25 @@ public class IMesYfBoardServiceImpl implements IMesYfBoardService {
resultModel.setPartDescription(mesWorkOrder.getPartName());
resultModel.setWorkOrderCompletedQuantity(mesWorkOrder.getCompleteQty());
resultModel.setWorkOrderPlannedQuantity(mesWorkOrder.getQty());
if (resultModel.getWorkOrderCompletedQuantity() == 0 || resultModel.getWorkOrderPlannedQuantity() == 0) {
resultModel.setWorkOrderFirstPassRate(0D);
//计算当前工单的合格率
double workOrderFirstPassRate;
List<MesWorkCenterBoardResultModel> resultModels = workOrderAndSnDataByOrderNoMap.get(mesWorkOrder.getWorkOrderNo());
if (CollectionUtils.isEmpty(resultModels)) {
workOrderFirstPassRate = 100;
}else {
resultModel.setWorkOrderFirstPassRate(resultModel.getWorkOrderCompletedQuantity() * 100 / resultModel.getWorkOrderPlannedQuantity());
//合格数
long count = resultModels.stream().filter(model -> model.getQcStatus() == MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()).count();
workOrderFirstPassRate = count * 100 / resultModels.size();
if (workOrderFirstPassRate > 100) {
workOrderFirstPassRate = 100;
}
}
BigDecimal bd = new BigDecimal(workOrderFirstPassRate);
bd = bd.setScale(2, RoundingMode.HALF_UP);
resultModel.setWorkOrderFirstPassRate(bd);
resultModelList.add(resultModel);
}
}
return resultModelList;
}
@ -146,12 +176,11 @@ public class IMesYfBoardServiceImpl implements IMesYfBoardService {
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(conditionModel.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(conditionModel.getWorkCenterCodeList().get(0), "workCenterCode", ddlPackBean);
MesWorkCenter mesWorkCenter = mesWorkCenterRepository.getByProperty(ddlPackBean);
String jph;
if (Objects.isNull(mesWorkCenter) || StringUtils.isEmpty(mesWorkCenter.getJph())) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode())
.setErrorDetail(conditionModel.getWorkCenterCodeList().get(0) + " 产线未维护有效的产线JPH信息")
.build();
jph = "0";
}else {
jph = mesWorkCenter.getJph();
}
//获取并汇总当前产线在当前时间前12个小时的每个小时时间段内工单的完成数
Map<String, Map<String, String>> timeZoneMap = getLastHoursTimeZoneMap(NUM);
@ -169,7 +198,7 @@ public class IMesYfBoardServiceImpl implements IMesYfBoardService {
//横坐标赋值
resultModel.setUnitHourCompletionRateTimePeriod(timeZone);
//目标值
resultModel.setUnitHourCompletionRateTargetValue(Double.valueOf(mesWorkCenter.getJph()));
resultModel.setUnitHourCompletionRateTargetValue(Double.valueOf(jph));
if (CollectionUtils.isEmpty(mesProductOffLineQueryResultList)) {
resultModel.setUnitHourCompletionRate(0);
}else {
@ -196,7 +225,8 @@ public class IMesYfBoardServiceImpl implements IMesYfBoardService {
conditionModel.getWorkCenterCodeList().get(0),
conditionModel.getOrganizeCode(),
timeZoneMap.get(START_TIME).get(START_TIME),
timeZoneMap.get(END_TIME).get(END_TIME));
timeZoneMap.get(END_TIME).get(END_TIME),
null);
//依次汇总每个时间段的数据
for (String timeZone : timeZoneMap.keySet()) {
MesWorkCenterBoardResultModel resultModel = new MesWorkCenterBoardResultModel();
@ -214,17 +244,17 @@ public class IMesYfBoardServiceImpl implements IMesYfBoardService {
collect(Collectors.groupingBy(MesWorkCenterBoardResultModel::getQcStatus));
if (CollectionUtils.isEmpty(nowResultList)
|| !resultModelByQcStatusMap.containsKey(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue())) {
//当前时间段没有生产加工记录或者没有合格的生产加工条码
resultModel.setWorkCenterFirstTimeOfflineQualificationRate(0D);
//当前时间段没有生产加工记录或者没有合格的生产加工条码时返回值置null保证数据为0时瀑布图连线的垂直
resultModel.setWorkCenterFirstTimeOfflineQualificationRate(null);
}else {
double workCenterFirstTimeOfflineQualificationRate = (
resultModelByQcStatusMap.get(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()).size() * 100
/ nowResultList.size());
double workCenterFirstTimeOfflineQualificationRate = resultModelByQcStatusMap.get(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()).size() * 100 / nowResultList.size();
//最大值只允许100
if (workCenterFirstTimeOfflineQualificationRate > 100) {
workCenterFirstTimeOfflineQualificationRate = 100;
}
resultModel.setWorkCenterFirstTimeOfflineQualificationRate(workCenterFirstTimeOfflineQualificationRate);
BigDecimal bd = new BigDecimal(workCenterFirstTimeOfflineQualificationRate);
bd = bd.setScale(2, RoundingMode.HALF_UP);
resultModel.setWorkCenterFirstTimeOfflineQualificationRate(bd);
}
resultModelList.add(resultModel);
}
@ -277,6 +307,9 @@ public class IMesYfBoardServiceImpl implements IMesYfBoardService {
//最新的点检单结果为 NOK
//结果设置为“异常”
resultModel.setInspectionResults(MesExtEnumUtil.INSPECTION_RESULTS.ABNORMAL.getValue());
}else {
//其它结果设置为“异常”
resultModel.setInspectionResults(MesExtEnumUtil.INSPECTION_RESULTS.ABNORMAL.getValue());
}
}else {
//不存在该种点检类型的点检单数据
@ -296,10 +329,10 @@ public class IMesYfBoardServiceImpl implements IMesYfBoardService {
@Override
public MesWorkCenterBoardResultModel queryAbnormalDowntime(MesWorkCenterBoardConditionModel conditionModel) {
MesWorkCenterBoardResultModel resultModel = new MesWorkCenterBoardResultModel();
//获取查询时间区间
Map<String, Map<String, String>> timeZoneMap = getTimeZoneMap(conditionModel.getWorkCenterCodeList(),
conditionModel.getTimeRangeIdentification(), conditionModel.getOrganizeCode());
resultModel.setAbnormalDowntime("00:45");
//获取查询时间区间(需求未明确,暂时注释,返回固定值)
// Map<String, Map<String, String>> timeZoneMap = getTimeZoneMap(conditionModel.getWorkCenterCodeList(),
// conditionModel.getTimeRangeIdentification(), conditionModel.getOrganizeCode());
resultModel.setAbnormalDowntime("00:00");
return resultModel;
}

@ -1,5 +1,6 @@
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.IMesEquipmentSpotCheckService;
import cn.estsh.i3plus.ext.mes.api.busi.IMesSpotCheckOrderPartService;
import cn.estsh.i3plus.ext.mes.api.busi.IMesSpotCheckOrderResultService;
@ -7,6 +8,7 @@ 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.base.IStateMachineRouteDesignService;
import cn.estsh.i3plus.mes.api.iservice.busi.ISyncFuncService;
import cn.estsh.i3plus.mes.apiservice.util.DateUtil;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
@ -15,6 +17,8 @@ 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.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.*;
@ -65,6 +69,11 @@ public class MesSpotCheckOrderService extends BaseMesService<MesSpotCheckOrder>
private ISyncFuncService syncFuncService;
@Autowired
private ICoreUtilCloud sysOrderNoRuleCloud;
@Autowired
private IStateMachineRouteDesignService stateMachineRouteDesignService;
@Autowired
private IMesConfigService mesConfigService;
@Override
public MesSpotCheckOrder insert(MesSpotCheckOrder bean) {
onInsertBean(bean);
@ -552,4 +561,34 @@ public class MesSpotCheckOrderService extends BaseMesService<MesSpotCheckOrder>
}
return spotCheckOrderMap;
}
@Override
public MesSpotCheckOrder queryMesSpotCheckOrderResultPrint(MesSpotCheckOrder mesSpotCheckOrder) {
//获取点检方案明细
DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesSpotCheckOrder.getOrganizeCode());
DdlPreparedPack.getNumEqualPack(mesSpotCheckOrder.getId(), "pid", packBean);
List<MesSpotCheckOrderResult> detailList = spotCheckOrderResultRepository.findByHqlWhere(packBean);
for (MesSpotCheckOrderResult mesSpotCheckOrderResult : detailList) {
if (mesSpotCheckOrderResult.getIsTolerance()==1){
mesSpotCheckOrderResult.setIsTolerance(Integer.parseInt(mesSpotCheckOrderResult.getSpotCheckSetValue())-Integer.parseInt(mesSpotCheckOrderResult.getSpotCheckRealValue()) );
}else {
mesSpotCheckOrderResult.setIsTolerance(0);
}
}
mesSpotCheckOrder.setCheckOrderResults(detailList);
MesRouteProcessCell routeProcessCell=new MesRouteProcessCell();
routeProcessCell.setOrganizeCode(mesSpotCheckOrder.getOrganizeCode());
routeProcessCell.setWorkCenterCode(mesSpotCheckOrder.getWorkCenterCode());
routeProcessCell.setWorkCellCode(mesSpotCheckOrder.getWorkCellCode());
Pager pager = new Pager();
pager.setCurrentPage(0);
pager.setPageSize(50);
ListPager listPager = stateMachineRouteDesignService.queryStateMachineRouteProcessCellByPager(routeProcessCell, pager);
List<MesRouteProcessCell> routeProcessCellList = listPager.getObjectList();
if (!CollectionUtils.isEmpty(routeProcessCellList)){
mesSpotCheckOrder.setProcessName(routeProcessCellList.get(0).getProcessCodeName());
}
mesSpotCheckOrder.setTemplateNo(mesConfigService.getCfgValue(mesSpotCheckOrder.getOrganizeCode(), MesCommonConstant.QC_ORDER_PRINT_TEMPLATE) );
return mesSpotCheckOrder;
}
}

@ -1,29 +1,48 @@
package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.report;
import cn.estsh.i3plus.ext.mes.api.base.IMesConfigService;
import cn.estsh.i3plus.ext.mes.api.busi.report.IMesEquipmentLogDetailService;
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.pojo.util.MesExtConstWords;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentLogDetail;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.StringJoiner;
@Service
public class MesEquipmentLogDetailService extends BaseMesService<MesEquipmentLogDetail> implements IMesEquipmentLogDetailService {
@Autowired
private IMesConfigService configService;
@Override
protected void setPackQueryBean(MesEquipmentLogDetail bean, DdlPackBean packBean) {
DdlPreparedPack.getStringEqualPack(new StringJoiner(MesExtConstWords.E_UNDERLINE).add(bean.getOrganizeCode()).add(bean.getEquipId().toString()).toString(), MesExtConstWords.ORG_EQUIP_ID, packBean);
DdlPreparedPack.getNumEqualPack(bean.getEquipId(), MesExtConstWords.EQUIP_ID, packBean);
// DdlPreparedPack.getNumEqualPack(bean.getEquipId(), MesExtConstWords.EQUIP_ID, packBean);
DdlPreparedPack.getNumEqualPack(bean.getVariableType(), MesExtConstWords.VARIABLE_TYPE, packBean);
DdlPreparedPack.getNumEqualPack(bean.getEquipVariableId(), MesExtConstWords.EQUIP_VARIABLE_ID, packBean);
DdlPreparedPack.getStringEqualPack(bean.getEquipmentCode(), MesExtConstWords.EQUIPMENT_CODE, packBean);
// DdlPreparedPack.getStringEqualPack(bean.getEquipmentCode(), MesExtConstWords.EQUIPMENT_CODE, packBean);
DdlPreparedPack.getStringLikerPack(bean.getEquipVariableName(), MesExtConstWords.EQUIP_VARIABLE_NAME, packBean);
DdlPreparedPack.timeBuilder(bean.getCreateDateTimeStart(), bean.getCreateDateTimeEnd(), MesExtConstWords.CREATE_DATE_TIME, packBean, true);
DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{MesExtConstWords.CREATE_DATE_TIME}, packBean);
}
@Override
public ListPager<MesEquipmentLogDetail> queryPager(MesEquipmentLogDetail bean, Pager pager) {
if (StringUtils.isEmpty(bean.getEquipId())) MesException.throwBusiException("查询条件的参数缺失设备ID[equipId]");
String orgEquipId = new StringJoiner(MesExtConstWords.E_UNDERLINE).add(bean.getOrganizeCode()).add(bean.getEquipId().toString()).toString();
if (!configService.checkShardingTablesObjectCfg(bean.getOrganizeCode(), MesEquipmentLogDetail.class.getSimpleName(), orgEquipId))
return new ListPager<>(new ArrayList<>(), pager);
return super.queryPager(bean, pager);
}
}

@ -1,5 +1,6 @@
package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.report;
import cn.estsh.i3plus.ext.mes.api.base.IMesConfigService;
import cn.estsh.i3plus.ext.mes.api.busi.report.IMesWorkCellScanMonitorLogService;
import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.BaseMesService;
import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException;
@ -43,6 +44,9 @@ public class MesWorkCellMonitorLogService extends BaseMesService<MesWorkCellScan
@Autowired
private MesWorkCellScanMonitorLogRepository workCellScanMonitorLogRepository;
@Autowired
private IMesConfigService configService;
@Override
public List<MesWorkCellScanMonitorLogModel> queryWorkCellScanMonitorLogList(MesWorkCellScanMonitorConditionModel conditionModel) {
@ -142,11 +146,15 @@ public class MesWorkCellMonitorLogService extends BaseMesService<MesWorkCellScan
private List<MesWorkCellScanMonitorLogModel> findWorkCellScanMonitorLogList(MesWorkCellScanMonitorConditionModel conditionModel) {
String orgWorkCode = new StringJoiner(MesExtConstWords.E_UNDERLINE).add(conditionModel.getOrganizeCode()).add(conditionModel.getWorkCenterCode()).toString();
if (!configService.checkShardingTablesObjectCfg(conditionModel.getOrganizeCode(), MesWorkCellScanMonitorLog.class.getSimpleName(), orgWorkCode)) return null;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(conditionModel.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(new StringJoiner(MesExtConstWords.E_UNDERLINE).add(conditionModel.getOrganizeCode()).add(conditionModel.getWorkCenterCode()).toString(), MesExtConstWords.ORG_WORK_CODE, packBean);
DdlPreparedPack.getStringEqualPack(conditionModel.getWorkCenterCode(), MesExtConstWords.WORK_CENTER_CODE, packBean);
// DdlPreparedPack.getStringEqualPack(conditionModel.getWorkCenterCode(), MesExtConstWords.WORK_CENTER_CODE, packBean);
DdlPreparedPack.getStringEqualPack(conditionModel.getWorkCellCode(), MesExtConstWords.WORK_CELL_CODE, packBean);
DdlPreparedPack.getStringEqualPack(conditionModel.getEquipmentCode(), MesExtConstWords.EQUIPMENT_CODE, packBean);
// DdlPreparedPack.getStringEqualPack(conditionModel.getEquipmentCode(), MesExtConstWords.EQUIPMENT_CODE, packBean);
DdlPreparedPack.getStringEqualPack(conditionModel.getStepCode(), MesExtConstWords.STEP_CODE, packBean);
DdlPreparedPack.getStringLikerPack(conditionModel.getScanInfo(), MesExtConstWords.SCAN_INFO, packBean);
DdlPreparedPack.getStringLikerPack(conditionModel.getWorkOrderNo(), MesExtConstWords.WORK_ORDER_NO, packBean);
@ -177,12 +185,16 @@ public class MesWorkCellMonitorLogService extends BaseMesService<MesWorkCellScan
private List<MesWorkCellScanMonitorLogModel> findEquipmentLogDetailList(MesWorkCellScanMonitorConditionModel conditionModel) {
String orgEquipId = new StringJoiner(MesExtConstWords.E_UNDERLINE).add(conditionModel.getOrganizeCode()).add(conditionModel.getEquipId().toString()).toString();
if (!configService.checkShardingTablesObjectCfg(conditionModel.getOrganizeCode(), MesEquipmentLogDetail.class.getSimpleName(), orgEquipId)) return null;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(conditionModel.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(new StringJoiner(MesExtConstWords.E_UNDERLINE).add(conditionModel.getOrganizeCode()).add(conditionModel.getEquipId().toString()).toString(), MesExtConstWords.ORG_EQUIP_ID, packBean);
DdlPreparedPack.getNumEqualPack(conditionModel.getEquipId(), MesExtConstWords.EQUIP_ID, packBean);
DdlPreparedPack.getStringEqualPack(orgEquipId, MesExtConstWords.ORG_EQUIP_ID, packBean);
// DdlPreparedPack.getNumEqualPack(conditionModel.getEquipId(), MesExtConstWords.EQUIP_ID, packBean);
DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getValue(), MesExtConstWords.VARIABLE_TYPE, packBean);
DdlPreparedPack.getNumEqualPack(conditionModel.getEquipVariableId(), MesExtConstWords.EQUIP_VARIABLE_ID, packBean);
DdlPreparedPack.getStringEqualPack(conditionModel.getEquipmentCode(), MesExtConstWords.EQUIPMENT_CODE, packBean);
// DdlPreparedPack.getStringEqualPack(conditionModel.getEquipmentCode(), MesExtConstWords.EQUIPMENT_CODE, packBean);
DdlPreparedPack.getStringLikerPack(conditionModel.getEquipVariableName(), MesExtConstWords.EQUIP_VARIABLE_NAME, packBean);
DdlPreparedPack.timeBuilder(conditionModel.getCreateDateTimeStart(), conditionModel.getCreateDateTimeEnd(), MesExtConstWords.CREATE_DATE_TIME, packBean, true);
DdlPreparedPack.getOrderByPack(new Object[]{conditionModel.getAscOrDesc()}, new String[]{MesExtConstWords.CREATE_DATE_TIME}, packBean);

@ -1,5 +1,6 @@
package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.report;
import cn.estsh.i3plus.ext.mes.api.base.IMesConfigService;
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;
@ -90,6 +91,12 @@ public class MesYfReportServiceImpl implements IMesYfReportService {
@Autowired
private MesEquipmentRepository mesEquipmentRepository;
@Autowired
private IMesConfigService mesConfigService;
@Autowired
private MesProductionRecordRepository mesProductionRecordRepository;
@Override
public ListPager<MesDeviceDataQueryReportResultModel> queryMesDeviceDataByPager(MesDeviceDataQueryReportConditionModel queryReportModel, Pager pager) {
ListPager<MesDeviceDataQueryReportResultModel> mesDeviceDataQueryReportResultModelListPager =
@ -157,7 +164,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 -> new StringJoiner(MesExtConstWords.COMMA).add(t.getWorkCenterCode()).add(t.getWorkCellCode()).add(t.getEquipmentCode()).toString()));
//根据设备代码查询设备id
Map<String, List<MesEquipmentLogDetail>> mesEquipmentLogDetailMap = getMesEquipmentLogDetailMap(mesProduceSn, productionRecordList);
Map<String, List<MesEquipmentLogDetail>> mesEquipmentLogDetailMap = getMesEquipmentLogDetailMap(mesProduceSn.getOrganizeCode(), productionRecordList);
//查询工序名称
Map<String, MesProcess> processMap = getMesProcessMap(mesProduceSn, processCodeList);
//数据组装
@ -220,29 +227,96 @@ public class MesYfReportServiceImpl implements IMesYfReportService {
return mesTraceabilityReportModelList;
}
private Map<String, List<MesEquipmentLogDetail>> getMesEquipmentLogDetailMap(MesProduceSn mesProduceSn, List<MesProductionRecord> productionRecordList) {
List<String> organizeCodeEquipList = getEquipList(mesProduceSn, productionRecordList);
@Override
public ListPager<MesProduceSn> queryMesProduceSn(MesProduceSn mesProduceSn, Pager pager) {
DdlPackBean packBean = getMesProduceSnPackBean(mesProduceSn);
if(Objects.isNull(pager)){
DdlPreparedPack.getOrderBy(mesProduceSn.getOrderByParam(),mesProduceSn.getAscOrDesc(),packBean);
return new ListPager<>(mesProduceSnRDao.findByHqlWhere(packBean), pager);
}
pager = PagerHelper.getPager(pager, mesProduceSnRDao.findByHqlWhereCount(packBean));
DdlPreparedPack.getOrderBy(mesProduceSn.getOrderByParam(),mesProduceSn.getAscOrDesc(),packBean);
return new ListPager<>(mesProduceSnRDao.findByHqlWherePage(packBean, pager), pager);
}
@Override
public ListPager<MesProductionRecord> queryMesProductionRecord(MesProductionRecord mesProductionRecord, Pager pager) {
DdlPackBean packBean = getDdlPackBeanMesProductionRecord(mesProductionRecord);
if(Objects.isNull(pager)){
DdlPreparedPack.getOrderBy(mesProductionRecord.getOrderByParam(),mesProductionRecord.getAscOrDesc(),packBean);
return new ListPager<>(mesProductionRecordRepository.findByHqlWhere(packBean), pager);
}
pager = PagerHelper.getPager(pager, mesProductionRecordRepository.findByHqlWhereCount(packBean));
DdlPreparedPack.getOrderBy(mesProductionRecord.getOrderByParam(),mesProductionRecord.getAscOrDesc(),packBean);
return new ListPager<>(mesProductionRecordRepository.findByHqlWherePage(packBean, pager), pager);
}
private DdlPackBean getDdlPackBeanMesProductionRecord(MesProductionRecord mesProductionRecord) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesProductionRecord.getOrganizeCode());
DdlPreparedPack.getStringLikerPack(mesProductionRecord.getProductSn(), "productSn", packBean);
DdlPreparedPack.getStringLikerPack(mesProductionRecord.getWorkOrderNo(), "workOrderNo", packBean);
DdlPreparedPack.getStringLikerPack(mesProductionRecord.getWorkCenterCode(), "workCenterCode", packBean);
DdlPreparedPack.getStringLikerPack(mesProductionRecord.getWorkCellCode(), "workCellCode", packBean);
DdlPreparedPack.getStringBiggerPack(mesProductionRecord.getCompleteDateTimeStart(), "completeDateTime", packBean);
DdlPreparedPack.getStringSmallerPack(mesProductionRecord.getCompleteDateTimeEnd(), "completeDateTime", packBean);
DdlPreparedPack.getStringEqualPack(mesProductionRecord.getEquipmentCode(), "equipmentCode", packBean);
DdlPreparedPack.getStringLikerPack(mesProductionRecord.getEquipmentName(), "equipmentName", packBean);
DdlPreparedPack.getStringLikerPack(mesProductionRecord.getMouldNo(), "mouldNo", packBean);
DdlPreparedPack.getStringLikerPack(mesProductionRecord.getShiftGroup(), "shiftGroup", packBean);
DdlPreparedPack.getStringLikerPack(mesProductionRecord.getShiftCode(), "shiftCode", packBean);
DdlPreparedPack.getNumEqualPack(mesProductionRecord.getReportStatus(), "reportStatus", packBean);
DdlPreparedPack.getNumEqualPack(mesProductionRecord.getReportType(), "reportType", packBean);
DdlPreparedPack.getNumEqualPack(mesProductionRecord.getIsComplete(), "isComplete", packBean);
DdlPreparedPack.getStringEqualPack(mesProductionRecord.getIsTest(), "isTest", packBean);
DdlPreparedPack.getStringEqualPack(mesProductionRecord.getPartNo(), "partNo", packBean);
DdlPreparedPack.getStringLikerPack(mesProductionRecord.getPartName(), "partName", packBean);
return packBean;
}
private DdlPackBean getMesProduceSnPackBean(MesProduceSn mesProduceSn) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesProduceSn.getOrganizeCode());
DdlPreparedPack.getStringLikerPack(mesProduceSn.getProductSn(), "productSn", packBean);
DdlPreparedPack.getStringLikerPack(mesProduceSn.getWorkOrderNo(), "workOrderNo", packBean);
DdlPreparedPack.getStringBiggerPack(mesProduceSn.getCreateDateTimeStart(), "createDatetime", packBean);
DdlPreparedPack.getStringSmallerPack(mesProduceSn.getCreateDateTimeEnd(), "createDatetime", packBean);
DdlPreparedPack.getNumEqualPack(mesProduceSn.getSnStatus(), "snStatus", packBean);
DdlPreparedPack.getNumEqualPack(mesProduceSn.getQcStatus(), "qcStatus", packBean);
DdlPreparedPack.getStringLikerPack(mesProduceSn.getPartNo(), "partNo", packBean);
DdlPreparedPack.getStringLikerPack(mesProduceSn.getPartName(), "partName", packBean);
DdlPreparedPack.getStringLikerPack(mesProduceSn.getWorkCenterCode(), "workCenterCode", packBean);
DdlPreparedPack.getNumEqualPack(mesProduceSn.getPrintCount(), "printCount", packBean);
DdlPreparedPack.getNumEqualPack(mesProduceSn.getPrintStatus(), "printStatus", packBean);
DdlPreparedPack.getStringLikerPack(mesProduceSn.getWorkCellCode(), "workCellCode", packBean);
DdlPreparedPack.getStringLikerPack(mesProduceSn.getCreateUser(), "createUser", packBean);
return packBean;
}
private Map<String, List<MesEquipmentLogDetail>> getMesEquipmentLogDetailMap(String organizeCode, List<MesProductionRecord> productionRecordList) {
List<String> organizeCodeEquipList = getEquipList(organizeCode, productionRecordList);
//工艺加工参数
if(CollectionUtils.isEmpty(organizeCodeEquipList)) return null;
return getMesEquipmentLogDetailMap(mesProduceSn, productionRecordList, organizeCodeEquipList);
return getMesEquipmentLogDetailMap(organizeCode, productionRecordList, organizeCodeEquipList);
}
private Map<String, List<MesEquipmentLogDetail>> getMesEquipmentLogDetailMap(MesProduceSn mesProduceSn, List<MesProductionRecord> productionRecordList, List<String> organizeCodeEquipList) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesProduceSn.getOrganizeCode());
DdlPreparedPack.getInPackList(organizeCodeEquipList, MesExtConstWords.ORG_EQUIP_ID, packBean);
DdlPreparedPack.getInPackList(productionRecordList.stream().map(MesProductionRecord::getMouldRecordId).collect(Collectors.toList()), "mouldRecordId", packBean);
private Map<String, List<MesEquipmentLogDetail>> getMesEquipmentLogDetailMap(String organizeCode, List<MesProductionRecord> productionRecordList, List<String> organizeCodeEquipList) {
List<MesEquipmentLogDetail> mesEquipmentLogDetailList = new ArrayList<>();
for (String organizeCodeEquip : organizeCodeEquipList) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(organizeCodeEquip, MesExtConstWords.ORG_EQUIP_ID, packBean);
DdlPreparedPack.getInPackList(productionRecordList.stream().map(MesProductionRecord::getMouldRecordId).distinct().collect(Collectors.toList()), "mouldRecordId", packBean);
DdlPreparedPack.getInPackArray(new Object[]{MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PROCESS_FINISH.getValue(), MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PROCESS.getValue()}, "variableType", packBean);
List<MesEquipmentLogDetail> mesEquipmentLogDetailList = mesEquipmentLogDetailRepository.findByHqlWhere(packBean);
mesEquipmentLogDetailList.addAll(mesEquipmentLogDetailRepository.findByHqlWhere(packBean));
}
if (CollectionUtils.isEmpty(mesEquipmentLogDetailList)) return null;
return mesEquipmentLogDetailList.stream().collect(Collectors.groupingBy(t -> new StringJoiner(MesExtConstWords.COMMA).add(t.getMouldRecordId().toString()).add(t.getWorkCenterCode()).add(t.getWorkCellCode()).add(t.getEquipmentCode()).toString()));
}
private List<String> getEquipList(MesProduceSn mesProduceSn, List<MesProductionRecord> productionRecordList) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesProduceSn.getOrganizeCode());
DdlPreparedPack.getInPackList(productionRecordList.stream().map(MesProductionRecord::getEquipmentCode).collect(Collectors.toList()), "equipmentCode", packBean);
private List<String> getEquipList(String organizeCode, List<MesProductionRecord> productionRecordList) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getInPackList(productionRecordList.stream().map(MesProductionRecord::getEquipmentCode).distinct().collect(Collectors.toList()), "equipmentCode", packBean);
List<MesEquipment> mesEquipmentList = mesEquipmentRepository.findByHqlWhere(packBean);
if (CollectionUtils.isEmpty(mesEquipmentList)) return null;
return mesEquipmentList.stream().map(t -> new StringJoiner(MesExtConstWords.E_UNDERLINE).add(t.getOrganizeCode()).add(t.getEquipId().toString()).toString()).collect(Collectors.toList());
return mesConfigService.findShardingTablesObjectCfg(organizeCode,MesEquipmentLogDetail.class.getSimpleName(),mesEquipmentList.stream().map(t -> new StringJoiner(MesExtConstWords.E_UNDERLINE).add(t.getOrganizeCode()).add(t.getEquipId().toString()).toString()).distinct().collect(Collectors.toList()));
}
private MesWorkCenter getWorkCenter(MesProduceSn produceSn) {

@ -0,0 +1,75 @@
package cn.estsh.i3plus.ext.mes.apiservice.utils;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.exception.ExceptionUtils;
import javax.persistence.Column;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* MapObject
*/
public class BeanUtil {
public static Object populateBean(Map<String, ? extends Object> map, Class<? extends Object> clazz) throws Exception {
Object obj = clazz.newInstance();
BeanUtils.populate(obj, map);
return obj;
}
public static List<Object> popListToList(Object object, List<Map<String, Object>> list) throws Exception {
List<Object> listRetun = new ArrayList<Object>();
for (Map<String, Object> map : list) {
listRetun.add(BeanUtil.populateBean(map, object.getClass()));
}
return listRetun;
}
/**
*
*
* @param c
* @return
*/
public static String[] getAllColumnFields(Class c) {
//父子类属性合并
Field[] fields = ArrayUtils.addAll(c.getFields(), c.getDeclaredFields());
//循环所有属性把名称存入数组
List<String> fieldsNameList = new ArrayList<>();
for (Field field : fields) {
field.setAccessible(true);
// 判断是否为数据库字段
if (field.isAnnotationPresent(Column.class)) {
fieldsNameList.add(field.getName());
}
}
return fieldsNameList.toArray(new String[fieldsNameList.size()]);
}
public static String getProperty(Object bean, String name) {
String proVal = null;
try {
proVal = BeanUtils.getProperty(bean, name);
} catch (Exception e) {
MesException.throwMesBusiException("反射获取对象【" + bean.getClass().getName() + "】属性【" + name +
"】值时异常:详情如下" + ExceptionUtils.getStackTrace(e));
}
return proVal;
}
public static void setProperty(Object bean, String name, Object values) {
try {
BeanUtils.setProperty(bean, name, values);
} catch (Exception e) {
MesException.throwMesBusiException("反射设置对象【" + bean.getClass().getName() + "】属性【" + name +
"】值时异常:详情如下" + ExceptionUtils.getStackTrace(e));
}
}
}

@ -57,4 +57,5 @@ public class MesCommonConstant {
//OPC注册ID
public static final String CLIENT_HANDLE_ID = "CLIENT_HANDLE_ID";
public static final String QC_ORDER_PRINT_TEMPLATE = "QC_ORDER_PRINT_TEMPLATE";
}

@ -64,4 +64,7 @@ public class MesLoadingListDetailModel {
@ApiParam("修改日期")
public String modifyDatetime;
@ApiParam("备注")
public String remark;
}

@ -1,6 +1,10 @@
package cn.estsh.i3plus.ext.mes.pojo.model;
import cn.estsh.i3plus.pojo.base.annotation.AnnoOutputColumn;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import io.swagger.annotations.ApiParam;
import lombok.Data;
@ -25,4 +29,146 @@ public class MesShippingOrderManagementDetailModel {
@ApiParam("计量单位")
private String unit;
@ApiParam("工厂代码")
private String organizeCode;
@ApiParam("发运单")
private String shippingCode;
@ApiParam("状态")
@AnnoOutputColumn(refClass = MesExtEnumUtil.SHIPPING_ORDER_STATUS.class, refForeignKey = "value", value = "description")
private Integer status;
@ApiParam("客户排序信息序号")
private Long custInfoSeq;
@ApiParam("条码")
private String barcode;
@ApiParam("客户订单号")
private String custOrderNo;
@ApiParam("创建时间")
private String createDatetime;
@ApiParam("创建人")
private String createUser;
@ApiParam(value = "更新时间")
private String modifyDatetime;
@ApiParam(value = "更新人")
private String modifyUser;
@ApiParam("发运单类型")
@AnnoOutputColumn(refClass = MesExtEnumUtil.SHIPPING_ORDER_TYPE.class, refForeignKey = "value", value = "description")
private Integer shippingType;
@ApiParam("客户代码")
private String custCode;
@ApiParam("客户名称")
private String custName;
@ApiParam("客户工厂代码")
private String custOrganizeCode;
@ApiParam("客户工厂名称")
private String custOrganizeName;
@ApiParam("开始扫描时间")
private String startScanTime;
@ApiParam("开始扫描时间(开始)")
private String startScanTimeStart;
@ApiParam("开始扫描时间(结束)")
private String startScanTimeEnd;
@ApiParam("结束扫描时间")
private String endScanTime;
@ApiParam("结束扫描时间(开始)")
private String endScanTimeStart;
@ApiParam("结束扫描时间(结束)")
private String endScanTimeEnd;
@ApiParam("发布时间")
private String publishTime;
@ApiParam("发布时间(开始)")
private String publishTimeStart;
@ApiParam("发布时间(结束)")
private String publishTimeEnd;
@ApiParam("累计打印次数")
private Integer printCount;
@ApiParam("最后打印用户")
private String lastPrintUser;
@ApiParam("最后打印时间")
private String lastPrintTime;
@ApiParam("发运组代码")
private String shippingGroupCode;
@ApiParam("发运组名称")
private String shippingGroupName;
@ApiParam("车系代码")
private String carSerialCode;
@ApiParam(value = "排序属性")
public String orderByParam = "";
@ApiParam(value = "排序类型1 正序2 倒序",example = "1")
public Integer ascOrDesc;
@ApiParam("明细id")
private Long id;
@ApiParam("明细状态")
@AnnoOutputColumn(refClass = MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.class, refForeignKey = "value", value = "description")
private Integer detailsStatus;
public MesShippingOrderManagementDetailModel(){
}
public MesShippingOrderManagementDetailModel(MesShippingOrderManagement m, MesShippingOrderManagementDetail d){
this.shippingCode = m.getShippingCode();
this.status = m.getStatus();
this.detailsStatus = d.getStatus();
this.custInfoSeq = d.getCustInfoSeq();
this.partName = d.getPartName();
this.partNo = d.getPartNo();
this.barcode = d.getBarcode();
this.custPartNo = d.getCustPartNo();
this.planQty = d.getPlanQty();
this.actualQty = d.getActualQty();
this.unit = d.getUnit();
this.custOrderNo = m.getOrderCode();
this.createDatetime = d.getCreateDatetime();
this.createUser = d.getCreateUser();
this.modifyDatetime = d.getModifyDatetime();
this.modifyUser = d.getModifyUser();
this.shippingType = m.getShippingType();
this.custCode = m.getCustCode();
this.custName = m.getCustName();
this.custOrganizeCode = m.getCustOrganizeCode();
this.custOrganizeName = m.getCustOrganizeName();
this.startScanTime = m.getStartScanTime();
this.endScanTime = m.getEndScanTime();
this.publishTime = m.getPublishTime();
this.printCount = m.getPrintCount();
this.lastPrintTime = m.getLastPrintTime();
this.lastPrintUser = m.getLastPrintUser();
this.shippingGroupCode = m.getShippingGroupCode();
this.shippingGroupName = m.getShippingGroupName();
this.carSerialCode = d.getCarSerialCode();
this.id = d.getId();
}
}

@ -4,6 +4,8 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiParam;
import lombok.Data;
import java.math.BigDecimal;
/**
* @Description : 线-
* @Reference :
@ -34,7 +36,7 @@ public class MesWorkCenterBoardResultModel {
private Double workCenterPlannedQuantity;
@ApiParam(value = "产线完成率")
private Double workCenterCompletionRate;
private BigDecimal workCenterCompletionRate;
/**
* 线
@ -55,7 +57,7 @@ public class MesWorkCenterBoardResultModel {
private Double workOrderPlannedQuantity;
@ApiParam(value = "工单一次合格率")
private Double workOrderFirstPassRate;
private BigDecimal workOrderFirstPassRate;
/**
*
@ -73,7 +75,7 @@ public class MesWorkCenterBoardResultModel {
* 线线
*/
@ApiParam(value = "产线一次下线合格率")
private Double workCenterFirstTimeOfflineQualificationRate;
private BigDecimal workCenterFirstTimeOfflineQualificationRate;
@ApiParam(value = "产线一次下线合格率-时间段")
private String workCenterFirstTimeOfflineQualificationRateTimePeriod;
@ -108,6 +110,13 @@ public class MesWorkCenterBoardResultModel {
public MesWorkCenterBoardResultModel() {
}
public MesWorkCenterBoardResultModel(String serialNumber, String createDateTime, String workOrderNo, String partNo) {
this.serialNumber = serialNumber;
this.createDateTime = createDateTime;
this.workOrderNo = workOrderNo;
this.partNo = partNo;
}
public MesWorkCenterBoardResultModel(String serialNumber, String createDateTime) {
this.serialNumber = serialNumber;
this.createDateTime = createDateTime;

@ -19,6 +19,9 @@ public class MesWorkCellScanMonitorConditionModel {
@ApiParam(value = "组织代码")
private String organizeCode;
@ApiParam(value = "操作人")
private String userInfo;
@ApiParam(value = "产线")
private String workCenterCode;
@ -43,6 +46,9 @@ public class MesWorkCellScanMonitorConditionModel {
@ApiParam("扫描/读取信息")
private String scanInfo;
@ApiParam("信息")
private String message;
@ApiParam("生产工单号")
private String workOrderNo;
@ -103,5 +109,35 @@ public class MesWorkCellScanMonitorConditionModel {
return this;
}
@Override
public String toString() {
return "MesWorkCellScanMonitorConditionModel{" +
"organizeCode='" + organizeCode + '\'' +
", userInfo='" + userInfo + '\'' +
", workCenterCode='" + workCenterCode + '\'' +
", workCellCode='" + workCellCode + '\'' +
", equipId='" + equipId + '\'' +
", equipmentCode='" + equipmentCode + '\'' +
", equipVariableId='" + equipVariableId + '\'' +
", equipVariableName='" + equipVariableName + '\'' +
", mouldRecordId='" + mouldRecordId + '\'' +
", scanInfo='" + scanInfo + '\'' +
", message='" + message + '\'' +
", workOrderNo='" + workOrderNo + '\'' +
", productSn='" + productSn + '\'' +
", partNo='" + partNo + '\'' +
", stepCode='" + stepCode + '\'' +
", logTypes='" + logTypes + '\'' +
", messageType='" + messageType + '\'' +
", limit='" + limit + '\'' +
", ascOrDesc='" + ascOrDesc + '\'' +
", createDateTimeStart='" + createDateTimeStart + '\'' +
", createDateTimeEnd='" + createDateTimeEnd + '\'' +
'}';
}
}

@ -127,6 +127,8 @@ public class MesExtConstWords {
public static final String LOG_TYPE = "logType";
//信息类型
public static final String MESSAGE_TYPE = "messageType";
//信息
public static final String MESSAGE = "message";
//枚举代码
public static final String ENUM_CODE = "enumCode";
//组件类型
@ -135,6 +137,12 @@ public class MesExtConstWords {
public static final String ORG_WORK_CODE = "orgWorkCode";
//工厂_设备ID
public static final String ORG_EQUIP_ID = "orgEquipId";
//配置代码
public static final String CFG_CODE = "cfgCode";
//配置键
public static final String CFG_KEY = "cfgKey";
//配置类型
public static final String CFG_TYPE = "cfgType";
//时间[开始/结束]条件
public static final String START_TIME_START = "startTimeStart";
@ -218,4 +226,15 @@ public class MesExtConstWords {
//英文逗号
public static final String COMMA = ",";
// ;
public static final String SEMICOLON = ";";
// 分表配置
public static final String MES_SHARDING_TABLES_OBJECT_CFG = "MES_SHARDING_TABLES_OBJECT_CFG";
// 工位扫描日志报表临时文件
public static final String MES_WCSML_REPORT_TMP_DATA = "MES_WCSML_REPORT_TMP_DATA";
public static final String CONDITION_U = "CONDITION";
public static final String DATA_U = "DATA";
}

Loading…
Cancel
Save