解决冲突

yfai-20250418-dev
王杰 3 months ago
commit a7bb6ae289

@ -0,0 +1,15 @@
package cn.estsh.i3plus.ext.mes.pcn.api.busi;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesPackageRuleContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesProduceSnPrintModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesWorkOrderExtModel;
import io.swagger.annotations.ApiOperation;
public interface IMesFengRenBatchReportService {
@ApiOperation(value = "缝纫批量汇报获取默认标包")
MesPackageRuleContext queryPackSpecQtyFengRenBatchReport(String organizeCode, String partNo);
@ApiOperation(value = "缝纫批量汇报")
MesProduceSnPrintModel doFengRenBatchReport(MesWorkOrderExtModel model);
}

@ -39,6 +39,8 @@ public interface IMesSortShippingCheckService {
void updateDetail(MesShippingOrderManagementDetail item);
void saveSecondShipScanOrder(MesSortShippingCheckModel model);
@ApiOperation(value = "待发运列表")
MesSortShippingCheckModel getSortShippingQueueList(MesSortShippingCheckModel model);

@ -76,4 +76,7 @@ public interface IMesWorkOrderService {
@ApiOperation("根据客户条码查询工单信息")
MesWorkOrder getWorkOrderNoByWorkOrderNo(String organizeCode,String workOrderNo);
@ApiOperation("物料+生产版本获取bom信息")
List<MesBom> findBomList(String organizeCode, MesPart mesPart, String bomVersion);
}

@ -0,0 +1,73 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.controller.busi;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesFengRenBatchReportService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step.method.IMesPackageNoGenerateStepService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesWorkOrderExtModel;
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 com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StopWatch;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Api("缝纫批量汇报")
@Slf4j
@RestController
@RequestMapping(MesCommonConstant.MES_YANFEN)
public class MesFengRenBatchReportController {
@Autowired
private IMesPackageNoGenerateStepService packageNoGenerateStepService;
@Autowired
private IMesFengRenBatchReportService fengRenBatchReportService;
@GetMapping("/feng-ren-batch-report/get-pack-spec-qty")
@ApiOperation(value = "缝纫批量汇报获取默认标包")
public ResultBean queryPackSpecQtyFengRenBatchReport(String organizeCode, String partNo) {
try {
ValidatorBean.checkNotNull(organizeCode, "工厂代码不能为空");
ValidatorBean.checkNotNull(partNo, "零件编码不能为空");
return ResultBean.success("查询成功").setResultObject(fengRenBatchReportService.queryPackSpecQtyFengRenBatchReport(organizeCode, partNo));
} catch (ImppBusiException imppException) {
return ResultBean.fail(imppException);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
@PostMapping("/feng-ren-batch-report/do")
@ApiOperation(value = "缝纫批量汇报")
public ResultBean doFengRenBatchReport(MesWorkOrderExtModel model) {
log.info("工厂{}缝纫批量汇报 --- START --- PARAM:{} --- {}", model.getOrganizeCode(), JSONObject.toJSONString(model), Thread.currentThread().getName());
StopWatch stopWatch = new StopWatch();
stopWatch.start();
try {
ValidatorBean.checkNotNull(model.getOrganizeCode(), "工厂代码不能为空");
ValidatorBean.checkNotNull(model.getModifyUser(), "操作人不能为空");
ValidatorBean.checkNotNull(model.getPartNo(), "零件编码不能为空");
ValidatorBean.checkNotNull(model.getWorkOrderNo(), "生产工单号不能为空");
ValidatorBean.checkNotNull(model.getId(), "生产工单ID不能为空");
return ResultBean.success("汇报成功").setResultObject(fengRenBatchReportService.doFengRenBatchReport(model));
} catch (ImppBusiException imppException) {
log.info("工厂{}缝纫批量汇报 --- ImppBusiException --- {} --- {}", model.getOrganizeCode(), imppException.getErrorMsg(), Thread.currentThread().getName());
return ResultBean.fail(imppException);
} catch (Exception e) {
log.info("工厂{}缝纫批量汇报 --- Exception --- {} --- {}", model.getOrganizeCode(), JSONObject.toJSONString(e), Thread.currentThread().getName());
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
} finally {
stopWatch.stop();
log.info("工厂{}缝纫批量汇报 --- FINALLY --- 耗时:{} --- {}", model.getOrganizeCode(), stopWatch.getTotalTimeMillis(), Thread.currentThread().getName());
}
}
}

@ -6,11 +6,6 @@ import cn.estsh.i3plus.ext.mes.pcn.api.job.IMesWorkOrderOfflineRestoreService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.schedulejob.MesReportNoSortJob;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.schedulejob.MesReportWorkByPreDayJob;
import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord;
import cn.estsh.i3plus.pojo.mes.bean.MesShift;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder;
import cn.estsh.i3plus.pojo.mes.repository.MesProductionRecordRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesShiftRepository;
import cn.estsh.impp.framework.boot.exception.ImppBusiException;
@ -18,13 +13,9 @@ import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.impp.framework.boot.util.ResultBean;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@RestController
@RequestMapping(MesCommonConstant.MES_YANFEN + "/test")
@ -57,19 +48,19 @@ public class TestController {
return null;
}
@GetMapping("/reportOrder")
@ApiOperation(value = "报工")
public void reportOrder() {
mesReportNoSortJob.executeMesJob(null, null);
// @GetMapping("/reportOrder")
// @ApiOperation(value = "报工")
// public void reportOrder() {
// mesReportNoSortJob.executeMesJob(null, null);
//
// }
}
@GetMapping("/reportOrder1")
@ApiOperation(value = "报工")
public void reportOrder1() {
mesReportWorkByPreDayJob.executeMesJob(null, null);
}
// @GetMapping("/reportOrder1")
// @ApiOperation(value = "报工")
// public void reportOrder1() {
// mesReportWorkByPreDayJob.executeMesJob(null, null);
//
// }
@GetMapping("/MesReportSortJob")
@ApiOperation(value = "排序工单汇报")
@ -96,4 +87,5 @@ public class TestController {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
}

@ -1,290 +1,293 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.daoimpl;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.dao.IMesEquipmentLogDao;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.platform.common.tool.TimeTool;
import cn.estsh.i3plus.pojo.base.codemaker.SnowflakeIdMaker;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentRecord;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.StringJoiner;
import java.util.stream.Collectors;
@Service
public class MesEquipmentLogDao implements IMesEquipmentLogDao {
@Value("${mes.sharding.append.org:}")
public String mesShardingAppendOrg;
@Autowired
private EntityManager entityManager;
@Autowired
private SnowflakeIdMaker snowflakeIdMaker;
private final static String TWO_S_APPEND = "%s_%s";
private final static String[] equipmentLogDetailFields = {MesPcnExtConstWords.ID, MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.IS_DELETED,
MesPcnExtConstWords.CREATE_USER, MesPcnExtConstWords.CREATE_DATE_TIME, MesPcnExtConstWords.MODIFY_USER, MesPcnExtConstWords.MODIFY_DATE_TIME,
MesPcnExtConstWords.DESCRIPTION, MesPcnExtConstWords.REMARK, MesPcnExtConstWords.SYSTEM_SYNC_DATE_TIME, MesPcnExtConstWords.SYSTEM_SYNC_STATUS,
MesPcnExtConstWords.AREA_CODE, MesPcnExtConstWords.WORK_CENTER_CODE, MesPcnExtConstWords.WORK_CELL_CODE, MesPcnExtConstWords.EQUIPMENT_CODE,
MesPcnExtConstWords.PROCESS_CODE, MesPcnExtConstWords.CRAFT_CODE, MesPcnExtConstWords.MOULD_RECORD_ID, MesPcnExtConstWords.EXTEND,
MesPcnExtConstWords.ORG_EQUIP_ID, MesPcnExtConstWords.EQUIP_ID, MesPcnExtConstWords.EQUIP_VARIABLE_ID, MesPcnExtConstWords.EQUIP_VARIABLE_NAME,
MesPcnExtConstWords.EQUIP_VARIABLE_DESC, MesPcnExtConstWords.READ_WRITE_FLAG, MesPcnExtConstWords.DATA_TYPE, MesPcnExtConstWords.EQUIP_VARIABLE_VALUE,
MesPcnExtConstWords.VARIABLE_TYPE, MesPcnExtConstWords.CATEGORY_LEVEL_TWO, MesPcnExtConstWords.QUALITY};
@Override
public List<MesEquipVariableCollectContext> queryMesEquipmentLog(List<MesEquipmentVariable> equipmentVariableList, String organizeCode, Integer equipId, Integer variableType) {
List<MesEquipVariableCollectContext> equipVariableCollectContextList = generateEquipVariableCollectContextList(equipmentVariableList);
if (CollectionUtils.isEmpty(equipmentVariableList) || StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(equipId) || StringUtils.isEmpty(variableType)) return null;
StringBuffer builder = new StringBuffer();
builder.append(" select e.equip_variable_id, e.equip_variable_value, e.equip_variable_status, e.quality, e.modify_date_time, e.id ");
builder.append(" from mes_equipment_log_");
if (!StringUtils.isEmpty(mesShardingAppendOrg) && mesShardingAppendOrg.toUpperCase().equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.name())) builder.append(organizeCode.toLowerCase()).append(MesPcnExtConstWords.E_UNDERLINE);
builder.append(equipId);
builder.append(" e where e.organize_code = :organizeCode and e.variable_type = :variableType ");
Query query = entityManager.createNativeQuery(builder.toString());
query.setParameter(MesPcnExtConstWords.ORGANIZE_CODE, organizeCode);
query.setParameter(MesPcnExtConstWords.VARIABLE_TYPE, variableType);
List list = query.getResultList();
if (CollectionUtils.isEmpty(list)) return equipVariableCollectContextList;
List<String> equipVariableIdList = equipmentVariableList.stream().filter(o -> null != o).map(o -> o.getId().toString()).collect(Collectors.toList());
for (Object equipmentLog : list) {
if (null == equipmentLog) continue;
Object[] equipmentLogArr = (Object[]) equipmentLog;
if (null == equipmentLogArr || equipmentLogArr.length != 6 || StringUtils.isEmpty(equipmentLogArr[0]) || !equipVariableIdList.contains(equipmentLogArr[0].toString())) continue;
equipVariableCollectContextList.stream().filter(o -> (null != o && o.getEquipVariableId().toString().equals(equipmentLogArr[0].toString()))).findFirst().get().copyValue(equipmentLogArr[1], equipmentLogArr[2], equipmentLogArr[3], equipmentLogArr[4], equipmentLogArr[5]);
}
return equipVariableCollectContextList;
}
@Override
public void updateEquipVariableStatus(String organizeCode, Integer equipId, Map<Long, String> equipmentLogIdMap, Integer equipVariableStatus) {
if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(equipId) || CollectionUtils.isEmpty(equipmentLogIdMap) || StringUtils.isEmpty(equipVariableStatus)) return;
StringBuffer builder = new StringBuffer();
for (int i = 0; i < equipmentLogIdMap.size(); i ++) {
builder.append(" update mes_equipment_log_");
if (!StringUtils.isEmpty(mesShardingAppendOrg) && mesShardingAppendOrg.toUpperCase().equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.name())) builder.append(organizeCode.toLowerCase()).append(MesPcnExtConstWords.E_UNDERLINE);
builder.append(equipId);
builder.append(" set equip_variable_status = :equipVariableStatus_");
builder.append(i);
builder.append(" where id = :id_");
builder.append(i);
builder.append(" and modify_date_time = :modifyDatetime_");
builder.append(i);
builder.append(" ;");
}
Query update = entityManager.createNativeQuery(builder.toString());
Integer index = 0;
for (Map.Entry<Long, String> entry : equipmentLogIdMap.entrySet()) {
if (null == entry) continue;
update.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.EQUIP_VARIABLE_STATUS, index), equipVariableStatus);
update.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.ID, index), entry.getKey());
update.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.MODIFY_DATE_TIME, index), entry.getValue());
index ++;
}
update.executeUpdate();
}
private List<MesEquipVariableCollectContext> generateEquipVariableCollectContextList(List<MesEquipmentVariable> equipmentVariableList) {
List<MesEquipVariableCollectContext> equipVariableCollectContextList = new ArrayList<>();
if (CollectionUtils.isEmpty(equipmentVariableList)) return equipVariableCollectContextList;
equipmentVariableList.stream().filter(o -> null != o).forEach(o -> {
MesEquipVariableCollectContext equipVariableCollectContext = new MesEquipVariableCollectContext(o.getId());
BeanUtils.copyProperties(o, equipVariableCollectContext);
equipVariableCollectContextList.add(equipVariableCollectContext);
});
return equipVariableCollectContextList;
}
@Override
public List<MesEquipVariableCollectContext> queryMesEquipmentLog(String organizeCode, Integer equipId, Integer variableType, List<Long> equipVariableIdList) {
if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(equipId) || StringUtils.isEmpty(variableType) || CollectionUtils.isEmpty(equipVariableIdList)) return null;
equipVariableIdList = equipVariableIdList.stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList());
StringBuffer builder = new StringBuffer();
builder.append(" select e.equip_variable_id, e.equip_variable_value, e.equip_variable_status, e.quality, e.modify_date_time, e.id ");
builder.append(" from mes_equipment_log_");
if (!StringUtils.isEmpty(mesShardingAppendOrg) && mesShardingAppendOrg.toUpperCase().equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.name())) builder.append(organizeCode.toLowerCase()).append(MesPcnExtConstWords.E_UNDERLINE);
builder.append(equipId);
builder.append(" e where e.organize_code = :organizeCode and e.variable_type = :variableType ");
if (equipVariableIdList.size() == 1) builder.append(" and e.equip_variable_id = :equipVariableId ");
else builder.append(" and e.equip_variable_id in (:equipVariableId) ");
Query query = entityManager.createNativeQuery(builder.toString());
query.setParameter(MesPcnExtConstWords.ORGANIZE_CODE, organizeCode);
query.setParameter(MesPcnExtConstWords.VARIABLE_TYPE, variableType);
if (equipVariableIdList.size() == 1) query.setParameter(MesPcnExtConstWords.EQUIP_VARIABLE_ID, equipVariableIdList.get(0));
else query.setParameter(MesPcnExtConstWords.EQUIP_VARIABLE_ID, equipVariableIdList);
List list = query.getResultList();
return backEquipVariableCollectContextList(list);
}
@Override
public List<MesEquipVariableCollectContext> queryMesEquipmentLog(String organizeCode, Integer equipId, Integer variableType) {
if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(equipId) || StringUtils.isEmpty(variableType)) return null;
StringBuffer builder = new StringBuffer();
builder.append(" select e.equip_variable_id, e.equip_variable_value, e.equip_variable_status, e.quality, e.modify_date_time, e.id ");
builder.append(" from mes_equipment_log_");
if (!StringUtils.isEmpty(mesShardingAppendOrg) && mesShardingAppendOrg.toUpperCase().equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.name())) builder.append(organizeCode.toLowerCase()).append(MesPcnExtConstWords.E_UNDERLINE);
builder.append(equipId);
builder.append(" e where e.organize_code = :organizeCode and e.variable_type = :variableType ");
Query query = entityManager.createNativeQuery(builder.toString());
query.setParameter(MesPcnExtConstWords.ORGANIZE_CODE, organizeCode);
query.setParameter(MesPcnExtConstWords.VARIABLE_TYPE, variableType);
List list = query.getResultList();
return backEquipVariableCollectContextList(list);
}
private List<MesEquipVariableCollectContext> backEquipVariableCollectContextList(List list) {
if (CollectionUtils.isEmpty(list)) return null;
List<MesEquipVariableCollectContext> equipVariableCollectContextList = new ArrayList<>();
for (Object equipmentLog : list) {
if (null == equipmentLog) continue;
Object[] equipmentLogArr = (Object[]) equipmentLog;
if (null == equipmentLogArr || equipmentLogArr.length != 6 || StringUtils.isEmpty(equipmentLogArr[0])) continue;
equipVariableCollectContextList.add(new MesEquipVariableCollectContext(Long.valueOf(equipmentLogArr[0].toString())).copyValue(equipmentLogArr[1], equipmentLogArr[2], equipmentLogArr[3], equipmentLogArr[4], equipmentLogArr[5]));
}
return equipVariableCollectContextList;
}
@Override
public void insertBatchEquipmentLogDetail(String organizeCode, Integer equipId, String userInfo, MesEquipmentRecord equipmentRecord, List<MesEquipVariableCollectContext> equipmentLogList) {
StringBuffer builder = new StringBuffer();
Integer index = 0;
for (MesEquipVariableCollectContext equipmentLog : equipmentLogList) {
if (null == equipmentLog) continue;
builder.append(" insert into mes_equipment_log_detail_");
if (!StringUtils.isEmpty(mesShardingAppendOrg) && mesShardingAppendOrg.toUpperCase().equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.name())) builder.append(organizeCode.toLowerCase()).append(MesPcnExtConstWords.E_UNDERLINE);
builder.append(equipId);
builder.append("( id, organize_code, is_valid, is_deleted, create_user, create_date_time, modify_user, modify_date_time,");
builder.append(" description, remark, system_sync_date_time, system_sync_status,");
builder.append(" area_code, work_center_code, work_cell_code, equipment_code, process_code, craft_code,");
builder.append(" mould_record_id, extend, org_equip_id, equip_id, equip_variable_id, equip_variable_name, equip_variable_desc,");
builder.append(" read_write_flag, data_type, equip_variable_value, variable_type, category_level_two, quality)");
builder.append(" values ( ");
for (int i = 0; i < equipmentLogDetailFields.length; i ++) {
if (StringUtils.isEmpty(equipmentLogDetailFields[i])) continue;
builder.append(MesPcnExtConstWords.COLON);
builder.append(equipmentLogDetailFields[i]);
builder.append(MesPcnExtConstWords.E_UNDERLINE);
builder.append(index);
if (i != equipmentLogDetailFields.length - 1) builder.append(" , ");
}
builder.append(" );");
index ++;
}
Query insert = entityManager.createNativeQuery(builder.toString());
String nowTime = TimeTool.getNowTime(true);
String orgEquipId = new StringJoiner(MesPcnExtConstWords.E_UNDERLINE).add(organizeCode).add(equipId.toString()).toString();
index = 0;
for (MesEquipVariableCollectContext equipmentLog : equipmentLogList) {
if (null == equipmentLog) continue;
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.ID, index), snowflakeIdMaker.nextId());
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.ORGANIZE_CODE, index), organizeCode);
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.IS_VALID, index), CommonEnumUtil.IS_VAILD.VAILD.getValue());
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.IS_DELETED, index), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.CREATE_USER, index), userInfo);
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.CREATE_DATE_TIME, index), nowTime);
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.MODIFY_USER, index), userInfo);
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.MODIFY_DATE_TIME, index), nowTime);
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.DESCRIPTION, index), null);
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.REMARK, index), null);
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.SYSTEM_SYNC_DATE_TIME, index), null);
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.SYSTEM_SYNC_STATUS, index), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.AREA_CODE, index), equipmentRecord.getAreaCode());
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.WORK_CENTER_CODE, index), equipmentRecord.getWorkCenterCode());
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.WORK_CELL_CODE, index), equipmentRecord.getWorkCellCode());
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.EQUIPMENT_CODE, index), equipmentRecord.getEquipmentCode());
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.PROCESS_CODE, index), equipmentRecord.getProcessCode());
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.CRAFT_CODE, index), equipmentRecord.getCraftCode());
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.MOULD_RECORD_ID, index), equipmentRecord.getId());
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.EXTEND, index), equipmentRecord.getProduceSnJson());
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.ORG_EQUIP_ID, index), orgEquipId);
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.EQUIP_ID, index), equipId);
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.EQUIP_VARIABLE_ID, index), equipmentLog.getEquipVariableId());
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.EQUIP_VARIABLE_NAME, index), equipmentLog.getEquipVariableName());
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.EQUIP_VARIABLE_DESC, index), equipmentLog.getEquipVariableDesc());
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.READ_WRITE_FLAG, index), equipmentLog.getReadWriteFlag());
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.DATA_TYPE, index), equipmentLog.getDataType());
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.EQUIP_VARIABLE_VALUE, index), equipmentLog.getEquipVariableValue());
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.VARIABLE_TYPE, index), equipmentLog.getVariableType());
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.CATEGORY_LEVEL_TWO, index), equipmentLog.getCategoryLevelTwo());
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.QUALITY, index), equipmentLog.getQuality());
index ++;
}
insert.executeUpdate();
}
}
package cn.estsh.i3plus.ext.mes.pcn.apiservice.daoimpl;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.dao.IMesEquipmentLogDao;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.platform.common.tool.TimeTool;
import cn.estsh.i3plus.pojo.base.codemaker.SnowflakeIdMaker;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentRecord;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.StringJoiner;
import java.util.stream.Collectors;
@Service
public class MesEquipmentLogDao implements IMesEquipmentLogDao {
@Value("${mes.sharding.append.org:}")
public String mesShardingAppendOrg;
@Autowired
private EntityManager entityManager;
@Autowired
private SnowflakeIdMaker snowflakeIdMaker;
private final static String TWO_S_APPEND = "%s_%s";
private final static String[] equipmentLogDetailFields = {MesPcnExtConstWords.ID, MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.IS_DELETED,
MesPcnExtConstWords.CREATE_USER, MesPcnExtConstWords.CREATE_DATE_TIME, MesPcnExtConstWords.MODIFY_USER, MesPcnExtConstWords.MODIFY_DATE_TIME,
MesPcnExtConstWords.DESCRIPTION, MesPcnExtConstWords.REMARK, MesPcnExtConstWords.SYSTEM_SYNC_DATE_TIME, MesPcnExtConstWords.SYSTEM_SYNC_STATUS,
MesPcnExtConstWords.AREA_CODE, MesPcnExtConstWords.WORK_CENTER_CODE, MesPcnExtConstWords.WORK_CELL_CODE, MesPcnExtConstWords.EQUIPMENT_CODE,
MesPcnExtConstWords.PROCESS_CODE, MesPcnExtConstWords.CRAFT_CODE, MesPcnExtConstWords.MOULD_RECORD_ID, MesPcnExtConstWords.EXTEND,
MesPcnExtConstWords.ORG_EQUIP_ID, MesPcnExtConstWords.EQUIP_ID, MesPcnExtConstWords.EQUIP_VARIABLE_ID, MesPcnExtConstWords.EQUIP_VARIABLE_NAME,
MesPcnExtConstWords.EQUIP_VARIABLE_DESC, MesPcnExtConstWords.READ_WRITE_FLAG, MesPcnExtConstWords.DATA_TYPE, MesPcnExtConstWords.EQUIP_VARIABLE_VALUE,
MesPcnExtConstWords.VARIABLE_TYPE, MesPcnExtConstWords.CATEGORY_LEVEL_TWO, MesPcnExtConstWords.QUALITY};
@Override
public List<MesEquipVariableCollectContext> queryMesEquipmentLog(List<MesEquipmentVariable> equipmentVariableList, String organizeCode, Integer equipId, Integer variableType) {
List<MesEquipVariableCollectContext> equipVariableCollectContextList = generateEquipVariableCollectContextList(equipmentVariableList);
if (CollectionUtils.isEmpty(equipmentVariableList) || StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(equipId) || StringUtils.isEmpty(variableType)) return null;
StringBuffer builder = new StringBuffer();
builder.append(" select e.equip_variable_id, e.equip_variable_value, e.equip_variable_status, e.quality, e.modify_date_time, e.id ");
builder.append(" from mes_equipment_log_");
if (!StringUtils.isEmpty(mesShardingAppendOrg) && mesShardingAppendOrg.toUpperCase().equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.name())) builder.append(organizeCode.toLowerCase()).append(MesPcnExtConstWords.E_UNDERLINE);
builder.append(equipId);
builder.append(" e where e.organize_code = :organizeCode and e.variable_type = :variableType ");
Query query = entityManager.createNativeQuery(builder.toString());
query.setParameter(MesPcnExtConstWords.ORGANIZE_CODE, organizeCode);
query.setParameter(MesPcnExtConstWords.VARIABLE_TYPE, variableType);
List list = query.getResultList();
if (CollectionUtils.isEmpty(list)) return equipVariableCollectContextList;
List<String> equipVariableIdList = equipmentVariableList.stream().filter(o -> null != o).map(o -> o.getId().toString()).collect(Collectors.toList());
for (Object equipmentLog : list) {
if (null == equipmentLog) continue;
Object[] equipmentLogArr = (Object[]) equipmentLog;
if (null == equipmentLogArr || equipmentLogArr.length != 6 || StringUtils.isEmpty(equipmentLogArr[0]) || !equipVariableIdList.contains(equipmentLogArr[0].toString())) continue;
equipVariableCollectContextList.stream().filter(o -> (null != o && o.getEquipVariableId().toString().equals(equipmentLogArr[0].toString()))).findFirst().get().copyValue(equipmentLogArr[1], equipmentLogArr[2], equipmentLogArr[3], equipmentLogArr[4], equipmentLogArr[5]);
}
return equipVariableCollectContextList;
}
@Override
public void updateEquipVariableStatus(String organizeCode, Integer equipId, Map<Long, String> equipmentLogIdMap, Integer equipVariableStatus) {
if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(equipId) || CollectionUtils.isEmpty(equipmentLogIdMap) || StringUtils.isEmpty(equipVariableStatus)) return;
StringBuffer builder = new StringBuffer();
for (int i = 0; i < equipmentLogIdMap.size(); i ++) {
builder.append(" update mes_equipment_log_");
if (!StringUtils.isEmpty(mesShardingAppendOrg) && mesShardingAppendOrg.toUpperCase().equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.name())) builder.append(organizeCode.toLowerCase()).append(MesPcnExtConstWords.E_UNDERLINE);
builder.append(equipId);
builder.append(" set equip_variable_status = :equipVariableStatus_");
builder.append(i);
builder.append(" where id = :id_");
builder.append(i);
builder.append(" and modify_date_time = :modifyDatetime_");
builder.append(i);
builder.append(" ;");
}
Query update = entityManager.createNativeQuery(builder.toString());
Integer index = 0;
for (Map.Entry<Long, String> entry : equipmentLogIdMap.entrySet()) {
if (null == entry) continue;
update.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.EQUIP_VARIABLE_STATUS, index), equipVariableStatus);
update.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.ID, index), entry.getKey());
update.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.MODIFY_DATE_TIME, index), entry.getValue());
index ++;
}
update.executeUpdate();
}
private List<MesEquipVariableCollectContext> generateEquipVariableCollectContextList(List<MesEquipmentVariable> equipmentVariableList) {
List<MesEquipVariableCollectContext> equipVariableCollectContextList = new ArrayList<>();
if (CollectionUtils.isEmpty(equipmentVariableList)) return equipVariableCollectContextList;
equipmentVariableList.stream().filter(o -> null != o).forEach(o -> {
MesEquipVariableCollectContext equipVariableCollectContext = new MesEquipVariableCollectContext(o.getId());
BeanUtils.copyProperties(o, equipVariableCollectContext);
equipVariableCollectContextList.add(equipVariableCollectContext);
});
return equipVariableCollectContextList;
}
@Override
public List<MesEquipVariableCollectContext> queryMesEquipmentLog(String organizeCode, Integer equipId, Integer variableType, List<Long> equipVariableIdList) {
if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(equipId) || StringUtils.isEmpty(variableType) || CollectionUtils.isEmpty(equipVariableIdList)) return null;
equipVariableIdList = equipVariableIdList.stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList());
StringBuffer builder = new StringBuffer();
builder.append(" select e.equip_variable_id, e.equip_variable_value, e.equip_variable_status, e.quality, e.modify_date_time, e.id ");
builder.append(" from mes_equipment_log_");
if (!StringUtils.isEmpty(mesShardingAppendOrg) && mesShardingAppendOrg.toUpperCase().equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.name())) builder.append(organizeCode.toLowerCase()).append(MesPcnExtConstWords.E_UNDERLINE);
builder.append(equipId);
builder.append(" e where e.organize_code = :organizeCode and e.variable_type = :variableType ");
if (equipVariableIdList.size() == 1) builder.append(" and e.equip_variable_id = :equipVariableId ");
else builder.append(" and e.equip_variable_id in (:equipVariableId) ");
Query query = entityManager.createNativeQuery(builder.toString());
query.setParameter(MesPcnExtConstWords.ORGANIZE_CODE, organizeCode);
query.setParameter(MesPcnExtConstWords.VARIABLE_TYPE, variableType);
if (equipVariableIdList.size() == 1) query.setParameter(MesPcnExtConstWords.EQUIP_VARIABLE_ID, equipVariableIdList.get(0));
else query.setParameter(MesPcnExtConstWords.EQUIP_VARIABLE_ID, equipVariableIdList);
List list = query.getResultList();
return backEquipVariableCollectContextList(list);
}
@Override
public List<MesEquipVariableCollectContext> queryMesEquipmentLog(String organizeCode, Integer equipId, Integer variableType) {
if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(equipId) || StringUtils.isEmpty(variableType)) return null;
StringBuffer builder = new StringBuffer();
builder.append(" select e.equip_variable_id, e.equip_variable_value, e.equip_variable_status, e.quality, e.modify_date_time, e.id ");
builder.append(" from mes_equipment_log_");
if (!StringUtils.isEmpty(mesShardingAppendOrg) && mesShardingAppendOrg.toUpperCase().equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.name())) builder.append(organizeCode.toLowerCase()).append(MesPcnExtConstWords.E_UNDERLINE);
builder.append(equipId);
builder.append(" e where e.organize_code = :organizeCode and e.variable_type = :variableType ");
Query query = entityManager.createNativeQuery(builder.toString());
query.setParameter(MesPcnExtConstWords.ORGANIZE_CODE, organizeCode);
query.setParameter(MesPcnExtConstWords.VARIABLE_TYPE, variableType);
List list = query.getResultList();
return backEquipVariableCollectContextList(list);
}
private List<MesEquipVariableCollectContext> backEquipVariableCollectContextList(List list) {
if (CollectionUtils.isEmpty(list)) return null;
List<MesEquipVariableCollectContext> equipVariableCollectContextList = new ArrayList<>();
for (Object equipmentLog : list) {
if (null == equipmentLog) continue;
Object[] equipmentLogArr = (Object[]) equipmentLog;
if (null == equipmentLogArr || equipmentLogArr.length != 6 || StringUtils.isEmpty(equipmentLogArr[0])) continue;
equipVariableCollectContextList.add(new MesEquipVariableCollectContext(Long.valueOf(equipmentLogArr[0].toString())).copyValue(equipmentLogArr[1], equipmentLogArr[2], equipmentLogArr[3], equipmentLogArr[4], equipmentLogArr[5]));
}
return equipVariableCollectContextList;
}
@Override
public void insertBatchEquipmentLogDetail(String organizeCode, Integer equipId, String userInfo, MesEquipmentRecord equipmentRecord, List<MesEquipVariableCollectContext> equipmentLogList) {
StringBuffer builder = new StringBuffer();
Integer index = 0;
builder.append(" insert into mes_equipment_log_detail_");
if (!StringUtils.isEmpty(mesShardingAppendOrg) && mesShardingAppendOrg.toUpperCase().equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.name())) builder.append(organizeCode.toLowerCase()).append(MesPcnExtConstWords.E_UNDERLINE);
builder.append(equipId);
builder.append("( id, organize_code, is_valid, is_deleted, create_user, create_date_time, modify_user, modify_date_time,");
builder.append(" description, remark, system_sync_date_time, system_sync_status,");
builder.append(" area_code, work_center_code, work_cell_code, equipment_code, process_code, craft_code,");
builder.append(" mould_record_id, extend, org_equip_id, equip_id, equip_variable_id, equip_variable_name, equip_variable_desc,");
builder.append(" read_write_flag, data_type, equip_variable_value, variable_type, category_level_two, quality) values ");
for (MesEquipVariableCollectContext equipmentLog : equipmentLogList) {
if (null == equipmentLog) continue;
builder.append(" ( ");
for (int i = 0; i < equipmentLogDetailFields.length; i ++) {
if (StringUtils.isEmpty(equipmentLogDetailFields[i])) continue;
builder.append(MesPcnExtConstWords.COLON);
builder.append(equipmentLogDetailFields[i]);
builder.append(MesPcnExtConstWords.E_UNDERLINE);
builder.append(index);
if (i != equipmentLogDetailFields.length - 1) builder.append(" , ");
}
builder.append(" ) ");
if (index != equipmentLogList.size() - 1) builder.append(" , ");
index ++;
}
Query insert = entityManager.createNativeQuery(builder.toString());
String nowTime = TimeTool.getNowTime(true);
String orgEquipId = new StringJoiner(MesPcnExtConstWords.E_UNDERLINE).add(organizeCode).add(equipId.toString()).toString();
index = 0;
for (MesEquipVariableCollectContext equipmentLog : equipmentLogList) {
if (null == equipmentLog) continue;
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.ID, index), snowflakeIdMaker.nextId());
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.ORGANIZE_CODE, index), organizeCode);
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.IS_VALID, index), CommonEnumUtil.IS_VAILD.VAILD.getValue());
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.IS_DELETED, index), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.CREATE_USER, index), userInfo);
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.CREATE_DATE_TIME, index), StringUtils.isEmpty(equipmentLog.getWriteDatetime()) ? nowTime : equipmentLog.getWriteDatetime());
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.MODIFY_USER, index), userInfo);
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.MODIFY_DATE_TIME, index), StringUtils.isEmpty(equipmentLog.getWriteDatetime()) ? nowTime : equipmentLog.getWriteDatetime());
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.DESCRIPTION, index), null);
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.REMARK, index), null);
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.SYSTEM_SYNC_DATE_TIME, index), null);
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.SYSTEM_SYNC_STATUS, index), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.AREA_CODE, index), equipmentRecord.getAreaCode());
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.WORK_CENTER_CODE, index), equipmentRecord.getWorkCenterCode());
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.WORK_CELL_CODE, index), equipmentRecord.getWorkCellCode());
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.EQUIPMENT_CODE, index), equipmentRecord.getEquipmentCode());
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.PROCESS_CODE, index), equipmentRecord.getProcessCode());
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.CRAFT_CODE, index), equipmentRecord.getCraftCode());
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.MOULD_RECORD_ID, index), equipmentRecord.getId());
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.EXTEND, index), equipmentRecord.getProduceSnJson());
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.ORG_EQUIP_ID, index), orgEquipId);
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.EQUIP_ID, index), equipId);
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.EQUIP_VARIABLE_ID, index), equipmentLog.getEquipVariableId());
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.EQUIP_VARIABLE_NAME, index), equipmentLog.getTagName());
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.EQUIP_VARIABLE_DESC, index), equipmentLog.getTagAddress());
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.READ_WRITE_FLAG, index), equipmentLog.getReadWriteFlag());
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.DATA_TYPE, index), equipmentLog.getDataType());
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.EQUIP_VARIABLE_VALUE, index), equipmentLog.getEquipVariableValue());
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.VARIABLE_TYPE, index), equipmentLog.getVariableType());
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.CATEGORY_LEVEL_TWO, index), StringUtils.isEmpty(equipmentLog.getCategoryLevelTwo()) ? null : equipmentLog.getCategoryLevelTwo());
insert.setParameter(String.format(TWO_S_APPEND, MesPcnExtConstWords.QUALITY, index), equipmentLog.getQuality());
index ++;
}
insert.executeUpdate();
}
}

@ -0,0 +1,267 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesProdOrgExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesTemplateService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesFengRenBatchReportService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductVersionService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print.IPrintTemplateStrategyService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step.method.IMesPackageNoGenerateStepService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesPackageDataContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesPackageRuleContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesProduceSnPrintModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesWorkOrderExtModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.api.iservice.base.IPartService;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.platform.common.tool.MathOperation;
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.base.util.StringUtil;
import cn.estsh.i3plus.pojo.mes.bean.*;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.model.StepResult;
import cn.estsh.i3plus.pojo.mes.repository.MesPartProdGroupRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesProductOffLineRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderLogRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderRepository;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import cn.estsh.impp.framework.boot.util.SpringContextsUtil;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Slf4j
@Service
public class MesFengRenBatchReportService implements IMesFengRenBatchReportService {
@Autowired
private IMesPackageNoGenerateStepService packageNoGenerateStepService;
@Autowired
private IMesProdOrgExtService prodOrgExtService;
@Autowired
private IPartService partService;
@Autowired
private IMesProductVersionService productVersionService;
@Autowired
private IMesWorkOrderService workOrderService;
@Autowired
private IMesTemplateService templateService;
@Autowired
private MesWorkOrderRepository workOrderRepository;
@Autowired
private MesPartProdGroupRepository partProdGroupRepository;
@Autowired
private MesWorkOrderLogRepository workOrderLogRepository;
@Autowired
private MesProductOffLineRepository productOffLineRepository;
@Override
public MesPackageRuleContext queryPackSpecQtyFengRenBatchReport(String organizeCode, String partNo) {
StepResult stepResult = StepResult.getSuccessComplete();
StationRequestBean reqBean = new StationRequestBean();
reqBean.setOrganizeCode(organizeCode);
return queryPackSpecQtyFengRenBatchReport(reqBean, stepResult, partNo);
}
private MesPackageRuleContext queryPackSpecQtyFengRenBatchReport(StationRequestBean reqBean, StepResult stepResult, String partNo) {
MesPackageRuleContext packageRuleContext = packageNoGenerateStepService.getPackageRuleContext(reqBean, stepResult, partNo, true);
if (null == packageRuleContext) MesPcnException.throwBusiException(!StringUtils.isEmpty(stepResult.getMsg()) ? stepResult.getMsg() : String.format("零件[%s]未维护有效的成品包装主数据!", partNo));
return packageRuleContext;
}
@Override
public MesProduceSnPrintModel doFengRenBatchReport(MesWorkOrderExtModel model) {
//验证工单有效性
MesWorkOrder workOrderDb = workOrderRepository.getByProperty(
new String[]{MesPcnExtConstWords.ID, MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID},
new Object[]{model.getId(), model.getOrganizeCode(), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue()});
if (null == workOrderDb) MesPcnException.throwBusiException("汇报失败:生产工单[%s]信息不存在!", model.getWorkOrderNo());
if (!StringUtils.isEmpty(workOrderDb.getOrderFlag()) && MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(workOrderDb.getOrderFlag()))
MesPcnException.throwBusiException("汇报失败:生产工单[%s]为试制工单!", model.getWorkOrderNo());
if (!MesExtEnumUtil.ORDER_STATUS.checkNosortAllowStatus(workOrderDb.getWorkOrderStatus()))
MesPcnException.throwBusiException("汇报失败:生产工单[%s]信息当前状态[%s]!", MesExtEnumUtil.ORDER_STATUS.valueOfDescription(workOrderDb.getWorkOrderStatus()));
//验证超工单
Double reportedQty = MathOperation.add(new Double(model.getNum()), workOrderDb.getReportedQty());
Integer workOrderStatus = MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue();
if (MathOperation.compareTo(reportedQty, workOrderDb.getQty()) > 0) {
MesWorkCenter workCenter = prodOrgExtService.getWorkCenterDb(model.getOrganizeCode(), workOrderDb.getWorkCenterCode());
if (StringUtils.isEmpty(workCenter.getIsCheckOrderQty()) || workCenter.getIsCheckOrderQty().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) != 0)
MesPcnException.throwMesBusiException("汇报失败:工单号[%s]计划数量[%s]已报工数量[%s],当前不允许超工单!", workOrderDb.getWorkOrderNo(), workOrderDb.getQty(), workOrderDb.getReportedQty());
Double rate = MathOperation.div((MathOperation.sub(reportedQty, workOrderDb.getQty())), workOrderDb.getQty());
if (MathOperation.compareTo(rate, MathOperation.div(workCenter.getOrderRate(), new Double(MesPcnExtConstWords.ONE_HUNDRED))) > 0)
MesPcnException.throwMesBusiException("汇报失败:请检查工单数量,工单号[%s]计划数量[%s]已报工数量[%s]超工单比例[%s]!", workOrderDb.getWorkOrderNo(), workOrderDb.getQty(), workOrderDb.getReportedQty(), workCenter.getOrderRate());
}
//查询物料信息
MesPart mesPart = partService.getPartByNo(workOrderDb.getOrganizeCode(), workOrderDb.getPartNo());
if (null == mesPart) MesPcnException.throwBusiException(
"汇报失败:生产工单[%s]关联的零件编码[%s]信息不存在!", workOrderDb.getWorkOrderNo(), workOrderDb.getPartNo());
//获取生产版本
MesProductVersion mesProductVersion = productVersionService.getMesProductVersion(workOrderDb.getOrganizeCode(), workOrderDb.getPartNo(), workOrderDb.getProductVersion());
if (null == mesProductVersion) MesPcnException.throwBusiException(
"汇报失败:生产工单[%s]零件编码[%s]生产版本[%s]未维护生产版本信息!", workOrderDb.getWorkOrderNo(), workOrderDb.getPartNo(), workOrderDb.getProductVersion());
String bomVersion = mesProductVersion.getAlternativePartList();
// partProdGroupCode 不为空查询的数据不为空查询数据中的获取bom方式不为空且枚举是 基于默认BOM 才bomversion = null 否则都是通过生产版本找bom
if (!StringUtil.isEmpty(workOrderDb.getPartProdGroupCode())) {
DdlPackBean partProdBean = DdlPackBean.getDdlPackBean(workOrderDb.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(workOrderDb.getPartProdGroupCode(), MesPcnExtConstWords.PART_PROD_GROUP_CODE, partProdBean);
List<MesPartProdGroup> mesPartProdGroupList = partProdGroupRepository.findByHqlTopWhere(partProdBean, 1);
// 没有零件生产组用默认找生产版本、有的话找获取bom方式枚举枚举是基于默认BOM 则直接找
MesPartProdGroup mesPartProdGroup = !CollectionUtils.isEmpty(mesPartProdGroupList) ? mesPartProdGroupList.get(0) : null;
if (null != mesPartProdGroup && !StringUtils.isEmpty(mesPartProdGroup.getEnableBomVersion()) &&
mesPartProdGroup.getEnableBomVersion() == MesExtEnumUtil.ENABLE_BOM_VERSION.ENABLE_BOM_VERSION_2.getValue()) {
bomVersion = MesPcnExtConstWords.EMPTY;
}
}
log.info("工厂{}缝纫批量汇报 --- PROCESS_INFO --- MesWorkOrderDB:{} --- MesProductVersion:{} --- bomVersion:{} --- {}", model.getOrganizeCode(), JSONObject.toJSONString(workOrderDb), JSONObject.toJSONString(mesProductVersion), bomVersion, Thread.currentThread().getName());
//物料+生产版本获取bom信息
List<MesBom> mesBoms = workOrderService.findBomList(mesPart.getOrganizeCode(), mesPart, bomVersion);
//获取标包, 编码规则, 模版代码
StepResult stepResult = StepResult.getSuccessComplete();
StationRequestBean reqBean = new StationRequestBean();
reqBean.setOrganizeCode(model.getOrganizeCode());
reqBean.setWorkCenterCode(workOrderDb.getWorkCenterCode());
reqBean.setUserInfo(model.getModifyUser());
reqBean.getDataMap().put(MesPcnExtConstWords.MESSAGE, "缝纫批量汇报");
MesPackageDataContext packageDataContext = (MesPackageDataContext) queryPackSpecQtyFengRenBatchReport(reqBean, stepResult, model.getPartNo());
//计数
Double unCompleteQty = MathOperation.sub(workOrderDb.getQty(), workOrderDb.getReportedQty());
if (MathOperation.compareTo(unCompleteQty, new Double(0)) < 0) unCompleteQty = new Double(0);
if (MathOperation.compareTo(reportedQty, workOrderDb.getQty()) < 0) workOrderStatus = MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue();
log.info("工厂{}缝纫批量汇报 --- PROCESS_INFO --- MesBomSize:{} --- MesPackageDataContext:{} --- workOrderStatus:{} --- reportedQty:{} --- {}", model.getOrganizeCode(), mesBoms.size(), JSONObject.toJSONString(packageDataContext), workOrderStatus, reportedQty, Thread.currentThread().getName());
//查询模版信息
MesLabelTemplate labelTemplate = templateService.getLabelTemplate(packageDataContext.getPackageTemplate(), reqBean.getOrganizeCode());
IPrintTemplateStrategyService strategyService = (null != labelTemplate && !StringUtils.isEmpty(labelTemplate.getMethodCode())) ? (IPrintTemplateStrategyService) SpringContextsUtil.getBean(labelTemplate.getMethodCode()) : null;
if (null == strategyService) MesPcnException.throwBusiException(
"汇报失败:生产工单[%s]关联的零件编码[%s]未配置有效的包装条码模版[%s]信息!", workOrderDb.getWorkOrderNo(), workOrderDb.getPartNo());
//生成箱条码集合
packageDataContext.setGenerateType(MesExtEnumUtil.PACKING_RULE_GENERATE_TYPE.PACKAGE.getValue());
packageDataContext.setPartPackWorkOrderNo(workOrderDb.getWorkOrderNo());
packageDataContext.setQty(new Double(model.getNum()));
stepResult.setDataCollection(new ArrayList());
packageNoGenerateStepService.doHandlePackagePrint(reqBean, stepResult, packageDataContext, null, packageNoGenerateStepService.generateVirtualPs(packageDataContext.getQty()), true);
//进行打印
List<MesPackage> packageList = (List<MesPackage>) stepResult.getDataCollection();
MesProduceSnPrintModel printModel = packageNoGenerateStepService.doPrintPackageNo(reqBean, null, stepResult, packageDataContext, labelTemplate, strategyService, packageList, true);
//更新工单
updateMesWorkOrder(workOrderDb, model, workOrderStatus, reportedQty, unCompleteQty);
//遍历写汇报
List<MesProductOffLine> mesProductOffLineList = new ArrayList<>();
for (MesPackage mesPackage : packageList) {
if (null == mesPackage) continue;
String nowTime = StringUtil.isEmpty(model.getDescription()) ? TimeTool.getNowTime(true) : model.getDescription();
for (MesBom mesBom : mesBoms) {
mesProductOffLineList.add(creatMesProductOffLine(model.getModifyUser(), workOrderDb, mesProductVersion, mesPackage.getPackageOneCode(), mesPackage.getPackageNo(), mesPackage.getQty(), mesBom, nowTime, mesBoms.size()));
}
}
productOffLineRepository.saveAll(mesProductOffLineList);
log.info("工厂{}缝纫批量汇报 --- PROCESS_INFO --- MesProductOffLine:{} --- {}", model.getOrganizeCode(), JSONObject.toJSONString(mesProductOffLineList), Thread.currentThread().getName());
log.info("工厂{}缝纫批量汇报 --- PROCESS_INFO --- MesPackageList:{} --- {}", model.getOrganizeCode(), JSONObject.toJSONString(packageList), Thread.currentThread().getName());
return printModel;
}
private void updateMesWorkOrder(MesWorkOrder mesWorkOrder, MesWorkOrderExtModel model, Integer workOrderStatus, Double reportedQty, Double unCompleteQty) {
ConvertBean.serviceModelUpdate(mesWorkOrder, model.getModifyUser());
String now = (new SimpleDateFormat(MesPcnExtConstWords.DATE_FORMAT_SSS)).format(new Date());
workOrderRepository.updateByPropertiesNoSync(
new String[]{MesPcnExtConstWords.ID, MesPcnExtConstWords.ORGANIZE_CODE},
new Object[]{mesWorkOrder.getId(), mesWorkOrder.getOrganizeCode()},
new String[]{MesPcnExtConstWords.WORK_ORDER_STATUS, MesPcnExtConstWords.REPORTED_QTY, MesPcnExtConstWords.COMPLETE_QTY, MesPcnExtConstWords.UN_COMPLETE_QTY,
MesPcnExtConstWords.DESCRIPTION, MesPcnExtConstWords.REMARK, MesPcnExtConstWords.MODIFY_DATE_TIME, MesPcnExtConstWords.MODIFY_USER, MesPcnExtConstWords.SYSTEM_SYNC_STATUS, MesPcnExtConstWords.SYSTEM_SYNC_DATE_TIME},
new Object[]{workOrderStatus, reportedQty, reportedQty, unCompleteQty,
model.getDescription(), model.getDescription(), now, model.getModifyUser(), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), MesPcnExtConstWords.EMPTY});
MesWorkOrderLog workOrderLog = new MesWorkOrderLog();
BeanUtils.copyProperties(mesWorkOrder, workOrderLog, MesPcnExtConstWords.ID,
MesPcnExtConstWords.CREATE_USER, MesPcnExtConstWords.MODIFY_USER, MesPcnExtConstWords.SYSTEM_SYNC_STATUS, MesPcnExtConstWords.SYSTEM_SYNC_DATE_TIME);
workOrderLog.setType(MesExtEnumUtil.WORK_ORDER_LOG_TYPE.REPORT.getValue());
workOrderLog.setModifyQty(new Double(model.getNum()));
workOrderLog.setDescription(model.getDescription());
workOrderLog.setRemark(model.getDescription());
workOrderLog.setWorkOrderStatus(workOrderStatus);
workOrderLog.setReportedQty(reportedQty);
workOrderLog.setCompleteQty(reportedQty);
workOrderLog.setUnCompleteQty(unCompleteQty);
workOrderLog.setCreateDatetime(model.getModifyUser());
workOrderLog.setModifyUser(model.getModifyUser());
workOrderLog.setCreateDatetime(now);
workOrderLog.setModifyDatetime(now);
workOrderLogRepository.insert(workOrderLog);
}
private MesProductOffLine creatMesProductOffLine(String userName, MesWorkOrder workOrderDb, MesProductVersion mesProductVersion,
String reportSn, String serialNumber, Double num, MesBom mesBom, String nowTime, Integer bomTotalSize) {
MesProductOffLine newMesProductOffLine = new MesProductOffLine();
newMesProductOffLine.setReportPartNo(workOrderDb.getPartNo());
newMesProductOffLine.setReportPartNameRdd(workOrderDb.getPartName());
newMesProductOffLine.setReportSn(reportSn);
newMesProductOffLine.setSerialNumber(serialNumber);
newMesProductOffLine.setItemPartNo(mesBom.getItemPartNo());
newMesProductOffLine.setItemPartName(mesBom.getItemPartName());
newMesProductOffLine.setItemQty(MathOperation.mul(num, mesBom.getItemQty()));
newMesProductOffLine.setAlort(mesProductVersion.getReceiveInventoryPoint());
newMesProductOffLine.setStgeLoc(mesProductVersion.getShipInventoryPoint());
newMesProductOffLine.setQty(num);
newMesProductOffLine.setBomVersion(workOrderDb.getProductVersion());
newMesProductOffLine.setUnit(mesBom.getUnit());
newMesProductOffLine.setItemUnit(mesBom.getItemUnit());
newMesProductOffLine.setWorkOrderNo(workOrderDb.getWorkOrderNo());
newMesProductOffLine.setWorkOrderType(workOrderDb.getWorkOrderType());
newMesProductOffLine.setWorkCenterCode(mesProductVersion.getWorkCenterCode());
newMesProductOffLine.setWorkCellCode(workOrderDb.getWorkCellCode());
newMesProductOffLine.setReportType(MesExtEnumUtil.MES_ALL_REPORT_TYPE.REPORT.getValue());
newMesProductOffLine.setSapWorkCenter(mesProductVersion.getWorkCenterCode());
newMesProductOffLine.setOrganizeCode(workOrderDb.getOrganizeCode());
newMesProductOffLine.setDescription(nowTime);
newMesProductOffLine.setBomTotalSize(bomTotalSize);
newMesProductOffLine.setBomCode(mesBom.getBomCode());
ConvertBean.serviceModelInitialize(newMesProductOffLine, userName);
return newMesProductOffLine;
}
}

@ -324,6 +324,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
mesWorkOrderLogRepository.insert(workOrderLog);
}
@Override
public List<MesBom> findBomList(String organizeCode, MesPart mesPart, String bomVersion) {
List<MesBom> bomData = new ArrayList<>();
// 递归展开 BOM

@ -44,6 +44,8 @@ public class YfaiPackageNumberRuleStrategyService implements INumberRulePackAttr
//20241223 {YEAR}{MONTH}{DAY}
//| {SPILTRULE}
private final static String DR_QTY = "DR_QTY";
@Override
public GenSerialNoModel execute(GenSerialNoModel genSerialNoModel) {
Map<String, Object> dataMap = genSerialNoModel.getDataMap();
@ -57,7 +59,8 @@ public class YfaiPackageNumberRuleStrategyService implements INumberRulePackAttr
genSerialNoModel.setDynamicRule(
new StringJoiner(MesPcnExtConstWords.COMMA)
.add(((new SimpleDateFormat(MesPcnExtConstWords.DATE_FORMAT_SHORT)).format(new Date())))
.add(String.format("%.1f", qty))
//.add(String.format("%.1f", qty))
.add(DR_QTY)
.add(unit)
.toString()
);
@ -78,6 +81,12 @@ public class YfaiPackageNumberRuleStrategyService implements INumberRulePackAttr
} catch (Exception e) {
packageOneCode = serialNo;
}
Map<String, Object> dataMap = genSerialNoModel.getDataMap();
MesPackageRuleContext packageRuleContext = !CollectionUtils.isEmpty(dataMap) ? (MesPackageRuleContext) dataMap.get(MesPackageRuleContext.class.getSimpleName()) : null;
Double qty = (!CollectionUtils.isEmpty(dataMap) && dataMap.containsKey(MesPcnExtConstWords.QTY)) ? (Double) dataMap.get(MesPcnExtConstWords.QTY) : null;
if (StringUtils.isEmpty(qty)) qty = null != packageRuleContext ? packageRuleContext.getPackSpecQty() : new Double(1);
serialNo = serialNo.replace(DR_QTY, String.format("%.1f", qty));
genSerialNoModel.putDataMap(serialNo, packageOneCode);
return serialNo;
}

@ -4,6 +4,7 @@ import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesCustomerPartService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesPrintedSnLogService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProduceSnExtService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print.IPrintTemplateStrategyService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.BarCodeUtils;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesProduceSnPrintDataModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesProduceSnPrintModel;
@ -23,12 +24,17 @@ import cn.estsh.i3plus.pojo.mes.model.StepResult;
import cn.estsh.i3plus.pojo.mes.repository.MesCustSoftInfoRepository;
import cn.estsh.i3plus.pojo.mes.repository.edi.cd.MesCimVolvoJisRackIdDetailRepository;
import cn.estsh.i3plus.pojo.mes.repository.edi.cd.MesCimVolvoJisRackIdRepository;
import com.google.zxing.WriterException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.*;
/**
@ -125,6 +131,19 @@ public class ChengDuVolvoPartPrintStrategy implements IPrintTemplateStrategyServ
result.put(MesPcnExtConstWords.PRINT_BAR_CODE, produceSn.getCustSn());
result.put(MesPcnExtConstWords.PRINT_DATE, TimeTool.getNowTime(true));
result.put(MesPcnExtConstWords.USER_NAME, produceSn.getCreateUser());
// 客户条码 dataMatrix
ByteArrayOutputStream dataMatrixCode;
try {
dataMatrixCode = BarCodeUtils.createDataMatrixCode(workOrder.getCustSn());
} catch (WriterException e) {
log.error("CustSnPrintStrategy --- execute --- 报错:{}", e.getMessage());
return result;
} catch (IOException e) {
log.error("CustSnPrintStrategy --- execute --- 报错:{}", e.getMessage());
return result;
}
result.put(MesPcnExtConstWords.CUST_SN_DATA_MATRIX, Base64.getEncoder().encodeToString(dataMatrixCode.toByteArray()));
return result;
}

@ -0,0 +1,97 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print.strategy;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesCustomerPartService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print.IPrintTemplateStrategyService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesProduceSnPrintModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.pojo.mes.bean.MesCustomerPart;
import cn.estsh.i3plus.pojo.mes.bean.MesNumberRule;
import cn.estsh.i3plus.pojo.mes.bean.MesPackage;
import cn.estsh.i3plus.pojo.mes.bean.MesPrintedSnLog;
import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.model.StepResult;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.util.*;
/**
* @Description :
* @Reference :
* @Author : wangjie
* @CreateDate : 2024/9/29 16:43
* @Modify:
**/
@Component
@Slf4j
public class YfaiPackageNoFengRenPrintStrategy implements IPrintTemplateStrategyService {
@Autowired
private IMesCustomerPartService mesCustomerPartService;
@Override
public MesProduceSnPrintModel execute(GenSerialNoModel genSerialNoModel, MesProduceSnPrintModel model,
MesNumberRule numberRule, StepResult stepResult, StationRequestBean reqBean,
Boolean isStep) {
MesCustomerPart customerPart = (!Objects.isNull(genSerialNoModel) &&
!CollectionUtils.isEmpty(genSerialNoModel.getDataMap()) && genSerialNoModel.getDataMap().containsKey(MesCustomerPart.class.getSimpleName()))
? (MesCustomerPart) genSerialNoModel.getDataMap().get(MesCustomerPart.class.getSimpleName())
: mesCustomerPartService.getMesCustomerPart(model.getOrganizeCode(), model.getPartNo());
// 返回的结果集合
List<Map<String, Object>> printDataMapList = new ArrayList<>();
if (!isStep) {
model.getPackageList().forEach(o -> printDataMapList.add(getPrintMap(model, o, customerPart)));
model.setPrintContextList(printDataMapList);
} else {
model.getPackageList().forEach(o -> printDataMapList.add(getPrintMap(model, o, customerPart)));
model.getPrintContextList().add(packResultMap(model, printDataMapList));
}
return model;
}
private Map<String, Object> packResultMap(MesProduceSnPrintModel printModel, List<Map<String, Object>> printTemplateDateList) {
Map<String, Object> resultMap = new HashMap<>();
resultMap.put(MesPcnExtConstWords.LABEL_TEMPLATE, printModel.getMesLabelTemplate());
resultMap.put(MesPcnExtConstWords.TEMPLATE_DATA, printTemplateDateList);
resultMap.put(MesPcnExtConstWords.TEMPLATE_CODE, printModel.getMesLabelTemplate().getTemplateCode());
resultMap.put(MesPcnExtConstWords.PRINTER, printModel.getPrinter());
return resultMap;
}
private MesPrintedSnLog getMesPrintedSnLog(MesPackage packageDb, String userName, String printData) {
MesPrintedSnLog snLog = new MesPrintedSnLog();
snLog.setBarcode(packageDb.getPackageNo());
snLog.setPartNo(packageDb.getPartNo());
snLog.setPartName(packageDb.getPartName());
snLog.setPrintData(printData);
snLog.setOrganizeCode(packageDb.getOrganizeCode());
ConvertBean.serviceModelInitialize(snLog, userName);
return snLog;
}
private Map<String, Object> getPrintMap(MesProduceSnPrintModel model, MesPackage packageDb, MesCustomerPart customerPart) {
Map<String, Object> resultMap = new HashMap<>();
resultMap.put(MesPcnExtConstWords.PART_NO, packageDb.getPartNo());
resultMap.put(MesPcnExtConstWords.PART_NAME, packageDb.getPartName());
resultMap.put(MesPcnExtConstWords.CUST_PART_NO, null == customerPart ? MesPcnExtConstWords.EMPTY : customerPart.getCustPartNo());
resultMap.put(MesPcnExtConstWords.QR_CODE, packageDb.getPackageNo());
resultMap.put(MesPcnExtConstWords.QTY, packageDb.getQty().intValue());
resultMap.put(MesPcnExtConstWords.UNIT, packageDb.getUnit());
resultMap.put(MesPcnExtConstWords.PACK_SPEC_QTY, packageDb.getPackSpecQty().intValue());
resultMap.put(MesPcnExtConstWords.LOT_NO, packageDb.getLotNo().replaceAll(MesPcnExtConstWords.SEPARATOR, MesPcnExtConstWords.SLANT_R));
resultMap.put(MesPcnExtConstWords.BAR_CODE, packageDb.getPackageOneCode());
resultMap.put(MesPcnExtConstWords.MODIFY_DATE_TIME, packageDb.getModifyDatetime().replaceAll(MesPcnExtConstWords.SEPARATOR, MesPcnExtConstWords.SLANT_R));
model.getMesPrintedSnLogList().add(getMesPrintedSnLog(packageDb, model.getUserName(), JSONObject.toJSONString(resultMap)));
return resultMap;
}
}

@ -72,7 +72,7 @@ public class MesFunctionQueueOrderPushService extends BaseSwsService implements
this.sendMessage(reqBean, new StationResultBean().writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PICK.getValue()),
String.format("[%s]%s: %s", buttonDynamicModel.getButtonName(), BUSI_TYPE.valueOfDescription(paramMap.get(MesPcnExtConstWords.BUSI_TYPE)), JSONObject.toJSONString(paramMap)),
MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PICK.getValue());
resultMap.put(MesPcnExtConstWords.DATA_TYPE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT.getValue());

@ -295,7 +295,8 @@ public class MesPackageNoGenerateStepService extends BaseStepService implements
}
//生成包装及明细, 根据标包数量判断是否执行打印 [递归]
private List<MesPackageDataContext> doHandlePackagePrint(StationRequestBean reqBean, StepResult stepResult, MesPackageRuleContext packageRuleContext,
@Override
public List<MesPackageDataContext> doHandlePackagePrint(StationRequestBean reqBean, StepResult stepResult, MesPackageRuleContext packageRuleContext,
List<MesPackageDataContext> packageDataContextList, List<String> productSnList, Boolean isAsyn) {
//缓存的包装条码明细数量
@ -513,7 +514,8 @@ public class MesPackageNoGenerateStepService extends BaseStepService implements
this.sendMessage(reqBean, new StationResultBean().writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.ERROR.getValue()), webMsg, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
this.cacheException(reqBean, reqBean.getStepName(), webMsg, e, true);
} else {
this.cacheException(reqBean, reqBean.getStepName(), webMsg, e, false);
if (!StringUtils.isEmpty(reqBean.getWorkCellCode())) this.cacheException(reqBean, reqBean.getStepName(), webMsg, e, false);
else log.info("工厂{}{} --- Exception --- {} --- {}", reqBean.getOrganizeCode(), reqBean.getDataMap().get(MesPcnExtConstWords.MESSAGE), JSONObject.toJSONString(e), Thread.currentThread().getName());
MesPcnException.throwBusiException(webMsg);
}
}
@ -521,7 +523,8 @@ public class MesPackageNoGenerateStepService extends BaseStepService implements
}
//进行打印
private void doPrintPackageNo(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesPackageRuleContext packageRuleContext,
@Override
public MesProduceSnPrintModel doPrintPackageNo(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesPackageRuleContext packageRuleContext,
MesLabelTemplate labelTemplate, IPrintTemplateStrategyService strategyService, List<MesPackage> packageList, Boolean isAsyn) {
if (null == strategyService) {
//查询模版信息
@ -545,7 +548,7 @@ public class MesPackageNoGenerateStepService extends BaseStepService implements
MesProduceSnPrintModel printModel = null;
try {
printModel = strategyService.execute(null, mesProduceSnPrintModel, null, stepResult, reqBean, true);
printModel = strategyService.execute(null, mesProduceSnPrintModel, null, stepResult, reqBean, !StringUtils.isEmpty(reqBean.getWorkCellCode()));
} catch (ImppBusiException e) {
if (!isAsyn) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), e.getErrorDetail());
else MesPcnException.throwBusiException(e.getErrorDetail());
@ -556,23 +559,28 @@ public class MesPackageNoGenerateStepService extends BaseStepService implements
this.cacheException(reqBean, reqBean.getStepName(), webMsg, e, true);
foundExThrowNoShowMsg();
} else {
this.cacheException(reqBean, reqBean.getStepName(), webMsg, e, false);
if (!StringUtils.isEmpty(reqBean.getWorkCellCode())) this.cacheException(reqBean, reqBean.getStepName(), webMsg, e, false);
else log.info("工厂{}{} --- Exception --- {} --- {}", reqBean.getOrganizeCode(), reqBean.getDataMap().get(MesPcnExtConstWords.MESSAGE), JSONObject.toJSONString(e), Thread.currentThread().getName());
MesPcnException.throwBusiException(webMsg);
}
}
if (CollectionUtils.isEmpty(printModel.getPrintContextList())) return;
if (CollectionUtils.isEmpty(printModel.getPrintContextList())) return printModel;
//发送打印信息
this.sendMessage(reqBean, new StationResultBean()
.busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.CUSTOM_COMPONENT.getValue())
.dataType(MesPcnEnumUtil.STATION_DATA_TYPE.FILE.getValue())
.customPageName(MesPcnExtConstWords.SORT_WORK_CENTER_PRINT)
.resultObj(printModel.getPrintContextList())
);
if (!StringUtils.isEmpty(reqBean.getWorkCellCode())){
this.sendMessage(reqBean, new StationResultBean()
.busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.CUSTOM_COMPONENT.getValue())
.dataType(MesPcnEnumUtil.STATION_DATA_TYPE.FILE.getValue())
.customPageName(MesPcnExtConstWords.SORT_WORK_CENTER_PRINT)
.resultObj(printModel.getPrintContextList())
);
}
//保存打印记录日志
printedSnLogRepository.saveAll(printModel.getMesPrintedSnLogList());
return printModel;
}
//强制打包业务处理
@ -689,7 +697,8 @@ public class MesPackageNoGenerateStepService extends BaseStepService implements
}
//生成虚拟条码,零件打包不写包装明细数据, 只是为了适配工步中的方法去递归生成包装条码
private List<String> generateVirtualPs(Double qty) {
@Override
public List<String> generateVirtualPs(Double qty) {
List<String> virtualPsList = new ArrayList<>();
for (int i = 0; i < qty.intValue(); i ++) {
virtualPsList.add(String.valueOf(i));

@ -1,7 +1,10 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step.method;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print.IPrintTemplateStrategyService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesPackageDataContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesPackageRuleContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesProduceSnPrintModel;
import cn.estsh.i3plus.pojo.mes.bean.MesLabelTemplate;
import cn.estsh.i3plus.pojo.mes.bean.MesPackage;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
@ -37,4 +40,15 @@ public interface IMesPackageNoGenerateStepService {
@Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = {ImppBusiException.class, Exception.class})
void doHandlePackagePart(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesPackageDataContext packageDataContext);
@ApiOperation(value = "生成包装及明细, 根据标包数量判断是否执行打印")
List<MesPackageDataContext> doHandlePackagePrint(StationRequestBean reqBean, StepResult stepResult, MesPackageRuleContext packageRuleContext,
List<MesPackageDataContext> packageDataContextList, List<String> productSnList, Boolean isAsyn);
@ApiOperation(value = "进行打印")
MesProduceSnPrintModel doPrintPackageNo(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesPackageRuleContext packageRuleContext,
MesLabelTemplate labelTemplate, IPrintTemplateStrategyService strategyService, List<MesPackage> packageList, Boolean isAsyn);
@ApiOperation(value = "生成虚拟条码,零件打包不写包装明细数据, 只是为了适配工步中的方法去递归生成包装条码")
List<String> generateVirtualPs(Double qty);
}

@ -116,6 +116,8 @@ public class MesPcnExtConstWords {
public static final String EQUIP_VARIABLE_VALUE = "equipVariableValue";
// 模具号
public static final String MOULD_NO = "mouldNo";
// 汇报数
public static final String REPORTED_QTY = "reportedQty";
// 工单完成数
public static final String COMPLETE_QTY = "completeQty";
// 工单未完成数

Loading…
Cancel
Save